文章目录
一、Redis简介
Redis是一种非关系型数据库(NoSql),其中所有的数据都以键值对的形式存储在内存中,与传统的关系型数据库(例如Mysql)相比,其最大的优势是性能十分优越,可以支持每秒十几万次的读/写操作,并且还支持集群、分布式、主从同步等配置,常用于高并发请求场景。此外它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。
Redis在 Java Web主要的两大应用场景:存储缓存用的数据、需要高速读/写的场合。
官网介绍
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
- Redis官网:https://redis.io/
- Redis中文网:https://www.redis.net.cn/
二、Redis的Key-Value存储结构
Redis使用的是K-V(键值对)结构存储数据,其中Key是字符串类型,Value可以是多种类型,常见的有String、Hash、List、Set等。
为便于理解,可以将Key想象成现实生活中的“标签”,而Value则可以是多种类型,例如一张试卷(String)、一个盒子(Set)、一批门锁(Hash),写着“装有气球的盒子”的标签则贴在(指向)对应的实物盒,我们可以通过标签纸找到对应的盒子(Set),从中根据需要取出气球(Set中的元素)。
三、常见数据类型及命令
- 本部分介绍常用的类型及命令,大全可参考:https://www.redis.net.cn/order/ 或 https://redis.io/commands/
2.1 key命令
key命令是直接操作key的命令,因为一个key指向一个value,所以可以通过操作key对整个键值对进行修改。
命令 | 释义 | 语法 |
---|---|---|
TYPE | 返回key所储存的值的类型 | TYPE key_name |
EXPIRE | 设置key的过期时间 | EXPIRE key_name seconds |
PERSIST | 移除给定key的过期时间,使得 key 永不过期 | PERSIST key_name |
TTL | 以秒为单位返回key的剩余过期时间 返回-2表示key不存在,返回-1表示key存在但没有设置过期时间 | TTL key_name |
DEL | 删除已存在的键,不存在的key会被忽略,返回被删除key的数量 | DEL key_name |
RENAME | 修改key的名称 | RENAME old_name new_name |
EXISTS | 判断指定的key是否存在,存在返回1,不存则返回0 | EXISTS key_name |
2.2 String类型命令
命令 | 释义 | 语法 |
---|---|---|
SET | 新增或覆写一个键值对 | SET key value |
MSET | 同时设置多个键值对 | MSET k1 v1 k2 v2 ... |
GET | 获取指定key的值 | GET key_name |
MGET | 获取一个或多个给定 key 的值 | MGET k1 k2 ... |
STRLEN | 获取指定 key 所储存的字符串值的长度 | STRLEN key_name |
INCR | 将 key 中储存的数字值增1 | INCR key_name |
DECR | 将 key 中储存的数字值减1 | DECR key_name |
INCRBY | 将 key 中储存的数字加上指定的值 | INCRBY key_name num |
DECRBY | 将 key 中储存的数字减去指定的值 | DECRBY key_name num |
APPEND | 为指定的 key 追加值(字符串拼接) | APPEND key_name append_str |
GETRANGE | 获取key存储的字符串的子串(参数包括头尾) | GETRANGE key_name start end eg. GETRANGE address 3 -1 |
SETNX | 仅当指定的 key 不存在时为 key 设置值 设置成功返回1,设置失败返回0 | SETNX key value |
2.3 Hash类型命令
Redis hash类型是field和value的映射表,特别适合用于存储对象。
命令 | 释义 | 语法 |
---|---|---|
HSET | 为哈希表中的字段赋值(一个或多个) | HSET key field value [field value ...] |
HGET | 返回哈希表中指定字段的值 | HGET key field |
HMGET | 返回哈希表中一个或多个给定字段的值 | HMGET key field [field ...] |
HGETALL | 返回哈希表中所有的字段(filed)和值(value) | HGETALL key |
HKEYS | 获取哈希表中的所有字段名(filed) | HKEYS key |
HVALS | 返回哈希表所有字段的值(value) | HVALS key |
HINCRBY | 为哈希表中的字段值加上指定增量值 | HINCRBY key field num |
HDEL | 删除哈希表中的一个或多个指定字段 | HDEL key field [field ...] |
2.4 Set类型命令
Redis的Set是无序集合。集合成员是唯一的,不能出现重复的数据。
命令 | 释义 | 语法 |
---|---|---|
SADD | 将一个或多个成员元素加入到集合中 | SADD key member [member ...] |
SREM | 移除集合中的一个或多个成员元素 | SREM key member [member ...] |
SPOP | 从集合中随机弹出n个元素(默认为1个) | SPOP key [count] |
SMEMBERS | 返回集合中的所有的成员 | SMEMBERS key |
SISMEMBER | 判断成员元素是否是集合的成员(返回 0 or 1 ) | SISMEMBER key member |
SCARD | 返回集合中元素的数量(去重统计) | SCARD key |
SINTER | 返回所有给定集合的交集 | SINTER key [key ...] |
SDIFF | 回给定两个集合之间的差集 | SDIFF key1 key2 |
SUNION | 返回所有给定集合的并集 | SUNION key [key ...] |
SRANDMEMBER | 随机返回n个成员(默认为1) | SRANDMEMBER key [count] |
2.5 Sorted Set类型命令
Redis 有序集合和集合一样不允许有重复的成员。不同的是每个元素都会关联一个double类型的分数(分数可以重复)。Redis通过分数来为集合中的成员进行排序。
命令 | 释义 | 语法 |
---|---|---|
ZADD | 将一个或多个成员(带分数)加入到有序集合中 | ZADD key score member [score member ...] |
ZREM | 移除集合中的一个或多个成员元素 | ZREM key member [member ...] |
ZPOPMAX | 弹出分值最大的成员 | ZPOPMAX key [count] |
ZPOPMIN | 弹出分值最小的成员 | ZPOPMIN key [count] |
ZRANGE | 按分数返回指定区间内的成员(包含头尾,默认从小到大) | ZRANGE key start stop [REV] |
ZRANK | 返回指定成员的排名(从小到大排) | ZRANK key member |
ZREVRANK | 返回指定成员的排名(从大到小排) | ZREVRANK key member |
2.6 List类型命令
Redis列表对应数据结构中的队列,按照插入顺序排序,可以添加一个元素导列表的左侧或者右侧。
命令 | 释义 | 语法 |
---|---|---|
LPUSH | 将一个或多个值插入到列表左侧 | LPUSH key element [element ...] |
RPUSH | 将一个或多个值插入到列表右侧 | RPUSH key element [element ...] |
LPOP | 弹出列表左侧的第一个元素 | LPOP key |
RPOP | 弹出列表右侧的第一个元素 | RPOP key |
LRANGE | 返回列表中指定区间内的元素(包括头尾) | LRANGE key start stop |
LINSERT | 在列表的某元素前或后插入一个元素 | LINSERT key <BEFORE | AFTER> pivot element eg. LINSERT print BEFORE world hello |
LSET | 替换(覆写)索引位置的元素 | LSET key index element |
LLEN | 返回列表的长度 | LLEN key |