1. String数据类型:
字符串常用操作:
SET key value
存入键值对, SET覆写旧值,无视类型MSET key value [key value ...]
批量存储字符串键值对SETNX key value
存入一个不存在的键值对,若key存在,不做任何操作GET key
根据key获取key对应的value值MGET key [key ...]
批量获取字符串键值对DEL key
删除对应key的键值对EXPIRE key seconds
给给定key值设置有效时间
原子加减
INCR key
给key值对应的数字加1DECR key
给key存储的数值减1INCRBY key increment
给key存储的数组加上incrementDECRBY key increment
给key存储的数组减去increment
应用场景:
-
单值缓存:
SET key value
,GET key
-
对象缓存:
SET user:1 value(json字符串)
;
存:MSET user:1:name zhangsan user:1:age 10
取:MGET user:1:name user:1:age
比json格式好,方便单属性操作,性能更好一点,最优选择HASH
-
分布式锁:
SETNX product:10001 true
// 发返回1表示加锁成功,有弊端不要使用
SETNX product:10001 true
// 发返回0表示加锁失败
DEL product:10001
// 释放锁
SET product:10001 true ex 10 nx
// 防止程序意外终止导致死锁 -
计数器
阅读量统计在Redis中的使用:INCR article:readcount:{文章Id}
文章的阅读量统计GET article:readcount:{文章Id}
-
分布式系统唯一id生成
INCRBY orderId 1000
redis生成序列号,提升性能。
2.HASH结构
常用操作
HSET key field value
// 存储一个哈希表key的键值HSETNX key field value
// 存储一个不存在的hash表的key的键值HMSET key field value [field value ...]
在一个哈希表key中存储多个键值对HGET key field
获取一个哈希表中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字段的值加上增量 increment
应用场景
-
对象存储
HSET user:10001 name zhangsan age 10
// 设置对象属性
HGET user:10001 name age
// 获取属性信息 -
电商购物车场景
电商购物车数据结构:- 以用户ID为key
- 商品ID为field
- 商品数量为value
购物车操作:
- 添加商品->
HSET cart:1001 10088 1
- 增加数量->
HINCRBY cart:1001 10088 1
- 商品总数->
HLEN cart:1001
- 删除商品
HDEL cart:1001 10088
- 获取购物车所有商品->
HGETALL cart:1001
3.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表头弹出一个元素,若该key没有元素则堵塞等待,堵塞timeout,若timeout为0表示一直堵塞BRPOP key [key ...] timeout
从key表尾弹出一个元素,若该key没有元素则阻塞等待,堵塞timeout,若timeout为0表示一直堵塞
应用场景
-
常用数据结构
- Stack(栈)=LPUSH+LPOP->FILO 先进后出
- Queue(队列)= LPUSH+RPOP->FIFO 先进先出
- Blocking MQ(堵塞队列)= LPUSH+BRPOP
-
微博和微信公众号消息流
示例中关注微信公众号备胎说车和Mac Talk在Redis中的使用:
- Mac Talk 发布消息ID为10018->
LPUSH msg:{订阅人Id} 10018
- 备胎说车发布消息ID为10019->
LPUSH msg:{订阅人Id} 10019
- 查看最新订阅的消息,比如6条->
LRANGE msg:{订阅人Id} 0 5
4.SET结构
常用命令
SADD key member [member ...]
将一个或者多个member放入key中,元素存在则忽略SREM key member [member ...]
移除集合key中的一个或者多个memberSMEMBERS key
返回集合key中所有元素SCARD key
集合key中元素个数SISMEMBER key member
判定member是否为key中的元素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 ...]
差集运算,
应用场景
- 抽奖模型
示例中参与抽奖在Redis中的使用:- 点击参与抽奖加入集合->
SADD key {userId}
- 查看抽奖参与的所有用户->
SMEMBERS key
- 抽取count名中奖者->
SRANDMEMBER key [count]/SPOP key [count]
- 点击参与抽奖加入集合->
- 微博微信点赞、关注、收藏等
示例中点赞模型在Redis中的使用:
-
点赞->
SADD like:{消息id} {用户id}
-
取消点赞->
SREM like:{消息id} {用户id}
-
检查用户是否点赞->
SISMEMBER like:{消息id} {用户id}
-
获取点赞的用户列表->
SMEMBERS like:{消息id}
-
获取点赞用户数->
SCARD like:{消息id}
-
微信微博关注模型:
示例微信关注模型在Redis中的使用:- 张三关注的人->
zhangsanSET->{lisi,sima,luban}
- 李四关注的人->
lisiSET->{zhangsan,sima,luban,qiaofeng}
- 王五关注的人->
wangwuSET->{zhangsan,lisi,luban,qiaofeng,duanyu}
- 张三和李四共同关注的人->
SINTER zhangdanSET lisiSET
- 张三关注的人也关注了李四->zhangsanSET列表每个成员关注列表去判定
SISMEMBER simaSET lisi
,SISMEMBER lubanSET lisi
- 张三可能认识的人->
SDIFF lisiSET zhangsanSET
- 张三关注的人->
-
集合操作电商平台商品筛选:
商品筛选条件在redis中的使用:SADD brand:HUAWEI p30
SADD brand:xiaomi mi-6X
SADD brand:IPhone iphone8
SADD os:android p30 mi-6X
SADD cpu:brand:intel p30 mi-6X
SADD ram:8G p30 mi-6X iphone8
SINTER os:android cpu:brand:intel ram:8G
->{p30 mi-6X}
SortedSet数据结构
常用命令
ZADD key score member [[score member] [score member] ...]
向有序结合key添加带分值的元素ZREM key member [member ...]
从有序集合中删除keyZSCORE key member
返回有序key中member成员的 score值ZINCRBY key increment member
为有序集合key中member元素分值加上incrementZCARD key
返回有序结合的key的元素个数ZRANGE key start stop [WITHSCORES]
正序获取有序集合key从start下标到stop下标的元素ZREVRANGE key start stop [WITHSCORES]
倒序获取有序集合key从start下标到stop下标的元素ZUNIONSTORE destination numkeys key [key ...]
并集计算ZUNIONSTORE destination numkeys key [key ...]
交集计算
应用场景
- 排行榜场景
微博排行榜在Redis中的使用:- 点击新闻->
ZINCRBY hotNews:20190819 1 守护香港
- 展示当日排行前十->
ZREVRANGE hotNews:20190819 0 10 WITHSCORES
- 七日搜索榜单->
ZUNIONSTORE hotNews:20190813-20190819 7 hotNews:20190813 hotNews:20190814 hotNews:20190815....hotNews:20190819
- 展示7日排行前十->
ZREVRANGE hotNews:20190813-20190819 0 10 WITHSCORES
- 点击新闻->