字符串
SET key value
MSET key value [key value...]
SETNX key value
返回1代表成功, 返回0代表失败
GET key
MGET key [key...]
DEL key [key...]
返回删除的key的个数
EXPIRE key seconds
为name延长了30秒的过期时间
原子加减
INCR key
初始设置为1, 每次增加1
DECR key
初始设置为-1, 每次减少1
INCRBY key increment
每次增加increment, 如果没有, 初始设置为increment
DECRBY key decrement
每次减少decrement, 如果没有, 初始设置为-decrement
对象缓存
SET user:1 value(json)
需要双引号
MSET user:1:name darkness user:1:age 28
MGET user:1:name user:1:age
分布式锁
SETNX product:10001
DEL product:10001
SET product:10001 true ex 10 nx
防止程序以外终止导致死锁
ex表示10秒过期, nx表示唯一key
计数器
INCR article:readcount:{文章id}
每次阅读增加一次
GET article:readcount:{文章id}
Web集群共享session
分布式系统全局序列号
INCRBY orderId 1000 批量生成序列号提升性能
Hash
HSET key field value
存储一个hash表key的键值对
HSETNX key field value
存储一个不存在的hash表key的键值对
分布式锁的重入次数
HMSET key field value [field value...]
在一个hash表key中存储多个键值对
HGET key field
获取hash表key对应键为field的值
HMGET key field [field...]
批量获取hash表key中多个键为field的值
HDEL key field [field...]
删除hash表key中的field键值对
HLEN key
返回hash表key中键的数量
HGETALL key
返回hash表key中所有的键值对
HINCRYBY key field increment
为hash表key中键为field的值加上增量increment
分布式锁的重入次数+1
对象缓存
HMSET user {userId}:name darkness {userId}:age 28
HMSET user 1:name darkness 1:age 28
HMGET user 1:name 1:age
优点
-
同类数据归类整合存储, 方便数据管理
-
相比string操作消耗内存与cpu更小
-
相比string存储更节省空间
缺点
-
过期功能不能使用在field上, 只能用在key上
-
Redis集群架构下不适合大规模使用
List
LPUSH key value [value...]
将一个或多个值value插入到key列表的表头(最左边)
返回插入后, 列表的总元素个数
RPUSH key value [value...]
将一个或多个值value插入到key列表的表尾(最右边)
LLEN key
查看一个list有多少个元素
LINDEX key index
查看一个list的index下标的元素
LPOP key
移除并返回key列表的头元素
RPOP key
移除并返回key列表的尾元素
LRANGE key start stop
返回列表key中指定区间内的元素
BLPOP key [key...] timeout
从key列表表头弹出一个元素, 若列表中没有元素, 阻塞等待timeout秒, 如果timeout=0, 一直等待
BRPOP key [key...] timeout
从key列表表尾弹出一个元素, 若列表中没有元素, 阻塞等待timeout秒, 如果timeout=0, 一直等待
BRPOP/BLPOP元素不够阻塞
应用1
栈
Stack = LPUSH + LPOP
队列
Queue = LPUSH + RPOP
阻塞队列
Blocking MQ = LPUSH + BRPOP
应用2: 消息推送
某用户订阅了某多个公众号, 公众号发消息, 该消息ID为123456, 遍历该公众号的关注者, 进行发消息:
遍历关注者发送消息: LPUSH msg:{darkness} 123456
每个关注者读取消息(最新5条): LRANGE msg:{darkness} 0 4
Set
SADD key member [member...]
向集合key中存入元素, 元素存在则忽略
存入后返回存入成功的个数
SREM key member [member...]
从集合key中删除元素
返回删除的元素个数
SMEMBERS key
获取集合key中所有元素
SCARD key
获取集合key中的元素个数
SISMEMBER key member
判断member元素是否存在于集合key中
存在返回1, 不存在返回0
SRANDMEMBER key [count]
从集合key中选出count个元素, 元素不从key中删除
SPOP key [count]
从集合key中选出count个元素, 元素从key中删除
SINTER key [key...]
交集运算
SINTERSTORE destination key [key...]
将交集结果存入新集合destination中
SUNION key [key...]
并集运算
SUNIONSTORE destination key [key...]
将并集结果存入新集合destination中
SDIFF key [key...]
差集运算
SDIFFSTORE destination key [key...]
将差集结果存入新集合destination中
应用1: 微信抽奖小程序
- 点击参与抽奖加入集合 SADD key darkness
- 查看参与抽奖所有用户 SMEMBERS key
- 抽取count名中奖者 SRANDMEMBER key [count] / SPOP key [count]
应用2: 微博点赞, 收藏, 标签
- 点赞 SADD like:{微博id} darkness
- 取消点赞 SREM like:{微博id} darkness
- 检查用户是否点过赞 SISMEMBER like:{微博id} darkness
- 获取点赞用户列表 SMEMBERS like:{微博id}
- 获取点赞用户数 SCARD like:{微博id}
应用3: 集合操作实现共同关注/好友
-
darkness的关注 like:darkness => {lily, mike, nancy, john, bob}
-
lily的关注 like:lily => {darkness, mike, bob, mary}
- darkness和lily的共同关注 SINTERSTORE like:darkness:lily like:darkness like:lily
Zset
ZADD key score member [[score member]...]
往有序集合key中加入带分值元素
ZREM key member [member...]
从有序集合key中删除元素
ZSCORE key member
返回有序集合key中元素member的分值
ZINCRBY key increment member
为有序集合key中元素member的分值加上increment
返回增加后的分值
ZCARD key
返回有序集合key中元素个数
ZRANGE key start stop [withscores]
正序获取有序集合key下标从start到stop的元素
ZREVRANGE key start stop [withscores]
倒序获取有序集合key下标从start到stop的元素
ZUNIONSTORE destkey numkeys key [key...]
并集计算
发现不仅取了并集, 还把相同成员的分值相加了
ZINTERSTORE destkey numkeys key [key...]
交集运算
发现不仅取了交集, 还把相同成员的分值相加了
应用: 实现排行榜
-
点击新闻 ZINCRBY hotNews:20220315 1 重庆新冠
-
展示今日排行前十 ZREVRANGE hotNews:20220315 0 9 WITHSCORES
-
七日搜索榜单计算 ZUNIONSTORE hotNews:20220309-20220315 7 hotNews:20220315 hotNews:20220314 ... hotNews:20220309
-
展示七日排行前十 ZREVRANGE hotNews:20220309-20220315 0 9 withscores