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
