Redis 数据结构
String
String 常用操作
- SET key value // 存入字符串键值对 MSET key value [key value …] // 批量存储字符串键值对
- SETNX key value // 存入一个不存在的字符串键值对 若存在则返回0
- GET key // 获取一个字符串键值
- MGET key [key …] // 批量获取字符串键值 DEL key [key …] // 删除一个键
- EXPIRE key seconds // 设置一个键的过期时间 ( 秒 )
原子加减
- INCR key // 将 key 中储存的数字值加 1
- DECR key // 将 key 中储存的数字值减 1
- INCRBY key increment // 将 key 所储存的值加上 increment
- DECRBY key decrement // 将 key 所储存的值减去 decrement
应用场景
- 计数器
INCR article:readcount:{ 文章 i d}
GET article:readcount:{ 文章 i d
- 分布式 session 共享
spring session + redis 实现 session 共享
通过分布式进行保存sessionId:Map 实现分布式 session
- 分布式全局序列号
INCRBY orderId 1000
每一次申请1000个序号,实现全局唯一ID
Hash
常用操作
- HSET key field value // 存储一个哈希表 key 的键值
- HSETNX key field value // 存储一个不存在的哈希表 key 的键值
- HMSET key field value [field value …] // 在一个哈希表 key 中存储多个键值对
- HGET key field // 获取哈希表 key 对应的 field 键值
- HMGET key field [field …] // 批量获取哈希表 key 中多个 field 键值
- HDEL key field [field …] // 删除哈希表 key 中的 field 键值
- HLEN key // 返回哈希表 key 中 field 的数量 HGETALL key // 返回哈希表 key 中所有的键值
- HINCRBY key field increment // 为哈希表 key 中 field 键的值加上增量 i ncrement
应用场景
- 电商购物车
- 以用户 i d 为 key
- 商品 i d 为 field
- 商品数量为 value
购物车操作
添加商品 hset cart:1001 10088 1
增加数量 hincrby cart:1001 10088 1
商品总数 hlen cart:1001
删除商品 hdel cart:1001 10088
获取购物车所有商品 hgetall cart:1001
List
常用操作
- LPUSH key value [value …] // 将一个或多个值 value 插入到 key 列表的表头 ( 最左边 )
- RPUSH key value [value …] // 将一个或多个值 value 插入到 key 列表的表尾 ( 最右边 ) LPOP key // 移除并返回 key 列表的头元素
- RPOP key // 移除并返回 key 列表的尾元素
- LRANGE key start stop // 返回列表 key 中 指定区 间内的元 素 , 区 间以 偏 移量 start 和 stop 指定
- BLPOP key [key …] timeout // 从 key 列表表头 弹出 一个元 素 , 若 列表中 没 有元 素 , 阻塞等待 timeout 秒 , 如果 timeout = 0 , 一 直阻塞等待
- BRPOP key [key …] timeout // 从 key 列表表尾 弹出 一个元 素 , 若 列表中 没 有元 素 , 阻塞等待 timeout 秒 , 如果 timeout = 0 , 一 直阻塞等待
应用
- Stack( 栈 ) = LPUSH + LPOP
- Queue( 队 列) = LPUSH + RPOP
- Blocking MQ ( 阻塞队 列) = LPUSH + BRPOP
Set
常用操作
- SADD key member [member …] // 往 集合 key 中存入元 素 , 元 素 存在 则忽略 , 若 key 不存在 则新建
- SREM key member [member …] // 从 集合 key 中删除元 素
- SMEMBERS key // 获取集合 key 中所有元 素 SCARD key // 获取集合 key 的元 素 个数
- SISMEMBER key member // 判断 member 元 素是否 存在 于 集合 key 中
- SRANDMEMBER key [count] // 从 集合 key 中 选出 count 个元 素 , 元 素 不 从 key 中删 除
- SPOP key [count] // 从 集合 key 中 选出 count 个元 素 , 元 素从 key 中删除 Set
运算操作
- SINTER key [key …] // 交 集 运算
- SINTERSTORE destination key [key …] // 将 交 集 结果 存入 新 集合 destination 中
- SUNION key [key …] // 并集 运算
- SUNIONSTORE destination key [key …] // 将并集 结果 存入 新 集合 destination 中
- SDIFF key [key …] // 差 集 运算
- SDIFF STORE destination key [key …] // 将 差 集 结果 存入 新 集合 destination 中
应用
- 微信 微博 点赞 , 收藏 , 标签
- 点 赞 SADD like:{ 消 息 ID} { 用户 ID}
- 取消点 赞 SREM like:{ 消 息 ID} { 用户 ID}
- 检查用户是否 点过 赞 SISMEMBER like:{ 消 息 ID} { 用户 ID}
- 获取点赞的用户列表 SMEMBERS like:{ 消 息 ID}
- 获取点赞用户数 SCARD like:{ 消 息 ID}
Zset
常用操作
- ZADD key score member [[score member] … ] // 往 有序集合 key 中加入 带 分值元 素
- ZREM key member [member … ] // 从 有序集合 key 中删除元 素
- ZSCORE key member // 返回有序集合 key 中元 素 member 的分值
- ZINCRBY key increment member // 为有序集合 key 中元 素 member 的分值加上 i ncrement
- ZCARD key // 返回有序集合 key 中元 素 个数
- ZRANGE key start stop [WITHSCORES] // 正序获取有序集合 key 从 start 下标到 stop 下标 的元 素
- ZREV RANGE key start stop [WITHSCORES] // 倒序获取有序集合 key 从 start 下 标 到 stop 下 标 的元 素 •
Zset 集合操作
- ZUNIONSTORE destkey numkeys key [key …] // 并集计 算
- ZINTERSTORE destkey numkeys key [key … ] // 交 集计 算
其他高级命令
-
keys: 全量遍历键。用来列出所有满足特定正则字符串规则的key, 当redis数据量比较大时, 性能比较差, 要避免使用
-
scan: 渐进式遍历键 SCAN cursor [MATCH pattern] [ COUNT count] scan 参数提供了三个参数, 第一个是 cursor 整数值(hash桶的索引值), 第二个是 key 的正则模式, 第三个是一次遍历的key的数量(参考值, 底层遍历的数量不一定), 并不是符合条件的结果数量。 第 一次遍历时, cursor 值为 0, 然后将返回结果中第一个整数值作为下一次遍历的 cursor。 一直遍历 到返回的 cursor 值为 0 时结束。
注意: 但是scan并非完美无瑕, 如果在scan的过程中如果有键的变化 (增加、 删除、 修改) , 那 么遍历效果可能会碰到如下问题: 新增的键可能没有遍历到, 遍历出了重复的键等情况, 也就是说 scan并不能保证完整的遍历出来所有的键, 这些是我们在开发时需要考虑的。 -
Info: 查看redis服务运行信息, 分为 9 大块, 每个块都有非常多的参数, 这 9 个块分别是: Server 服务器运行的环境参数 Clients 客户端相关信息 Memory 服务器运行内存统计数据 Persistence 持久化信息 Stats 通用统计数据 Replication 主从复制相关信息 CPU CPU 使用情况 Cluster 集群信息 KeySpace 键值对统计数量信息