String应用场景
单值缓存
SET key value GET key
对象缓存
- SET user:1 value(json格式数据)
- MSET user:1:name zhuge user:1:balance 1888
- MGET user:1:name user:1:balance
分布式锁
- SETNX product:10001 true //返回1代表获取锁成功
- SETNX product:10001 true //返回0代表获取锁失败
- 。。。执行业务操作
- DEL product:10001 //执行完业务释放锁
- SET product:10001 true ex 10 nx //防止程序意外终止导致死锁
计数器
- INCR article:readcount:{文章id}
- GET article:readcount:{文章id}
- Web集群session共享 spring session + redis实现session共享
- 分布式系统全局序列号 INCRBY orderId 1000 //redis批量生成序列号提升性能
Hash应用场景
对象缓存
- HMSET user {userId}:name zhuge {userId}:balance 1888
- HMSET user 1:name zhuge 1:balance 1888
- HMGET user 1:name 1:balance
电商购物车
- 以用户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
List应用场景
常用数据结构
- Stack(栈) = LPUSH + LPOP
- Queue(队列)= LPUSH + RPOP Blocking
- MQ(阻塞队列)= LPUSH + BRPOP
微博和微信公号消息流
微博消息和微信公号消息
关注了MacTalk,备胎说车等大V
- MacTalk发微博,消息ID为10018 LPUSH msg:{诸葛老师-ID} 10018
- 备胎说车发微博,消息ID为10086 LPUSH msg:{诸葛老师-ID} 10086
- 查看最新微博消息 LRANGE msg:{诸葛老师-ID} 0 4
Set应用场景
微信抽奖小程序
- 点击参与抽奖加入集合 SADD key {userlD}
- 查看参与抽奖所有用户 SMEMBERS key
- 抽取count名中奖者 SRANDMEMBER key [count] / SPOP key [count] 「备注:spop会把中奖用户删除,适用于得了二等奖就不能得一等奖的场景」
集合操作
交集:SINTER set1 set2 set3 { c }
并集:SUNION set1 set2 set3 { a,b,c,d,e }
差集:SDIFF set1 set2 set3 { a } 「备注:set1和(set2 and set3和)得差集」
微信微博点赞,收藏,标签
- 点赞 SADD like:{消息ID} {用户ID}
- 取消点赞 SREM like:{消息ID} {用户ID}
- 检查用户是否点过赞 SISMEMBER like:{消息ID} {用户ID}
- 获取点赞的用户列表 SMEMBERS like:{消息ID}
- 获取点赞用户数 SCARD like:{消息ID}
集合操作实现微博微信关注模型
- 诸葛老师关注的人: zhugeSet-> {guojia, xushu}
- 杨过老师关注的人: yangguoSet--> {zhuge, baiqi, guojia, xushu}
- 郭嘉老师关注的人: guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)
- 我和杨过老师共同关注: SINTER zhugeSet yangguoSet--> {guojia, xushu}
- 我关注的人也关注他(杨过老师): SISMEMBER guojiaSet yangguo SISMEMBER xushuSet yangguo
- 我可能认识的人: SDIFF yangguoSet zhugeSet->(zhuge, baiqi}
集合操作实现电商商品筛选
筛选出安卓系统intel、8G
- SADD brand:huawei P40
- SADD brand:xiaomi mi-10
- SADD brand:iPhone iphone12
- SADD os:android P40 mi-10
- SADD cpu:brand:intel P40 mi-10
- SADD ram:8G P40 mi-10 iphone12
- SINTER os:android cpu:brand:intel ram:8G {P40,mi-10}
ZSet有序集合结构
- 点击新闻 ZINCRBY hotNews:20190819 1 守护香港
- 展示当日排行前十 ZREVRANGE hotNews:20190819 0 9 WITHSCORES
- 七日搜索榜单计算 ZUNIONSTORE hotNews:20190813-20190819 7 hotNews:20190813 hotNews:20190814... hotNews:20190819
- 展示七日排行前十 ZREVRANGE hotNews:20190813-20190819 0 9 WITHSCORES