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值对应的数字加1 -
DECR key给key存储的数值减1 -
INCRBY key increment给key存储的数组加上increment -
DECRBY 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 1000redis生成序列号,提升性能。
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中的一个或者多个member -
SMEMBERS 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 p30SADD brand:xiaomi mi-6XSADD brand:IPhone iphone8SADD os:android p30 mi-6XSADD cpu:brand:intel p30 mi-6XSADD 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 ...]从有序集合中删除key -
ZSCORE key member返回有序key中member成员的 score值 -
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 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
- 点击新闻->










网友评论