redis各种数据类型的应用场景

2023-12-18 22:53:22
String应用场景
单值缓存

????????SET ?key ?value ?? ? GET ?key ?? ?

对象缓存
  1. SET ?user:1 ?value(json格式数据)
  2. MSET ?user:1:name ?zhuge ? user:1:balance ?1888 ? ?
  3. MGET ?user:1:name ? user:1:balance
分布式锁
  1. ?????SETNX ?product:10001 ?true ?? ??? ?//返回1代表获取锁成功
  2. ?????SETNX ?product:10001 ?true ?? ??? ?//返回0代表获取锁失败
  3. ?????。。。执行业务操作
  4. ?????DEL ?product:10001?? ??? ??? ?//执行完业务释放锁
  5. ?????SET product:10001 true ?ex ?10 ?nx?? ?//防止程序意外终止导致死锁
计数器
  1. ????????INCR article:readcount:{文章id} ??? ?
  2. ????????GET article:readcount:{文章id}
  3. ????????Web集群session共享 spring session + redis实现session共享
  4. ????????分布式系统全局序列号?? ? 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 ?

电商购物车
  1. 以用户id为key
  2. 商品id为field
  3. 商品数量为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应用场景
微信抽奖小程序
  1. 点击参与抽奖加入集合 SADD key {userlD}
  2. 查看参与抽奖所有用户 SMEMBERS key?? ? ?
  3. 抽取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和)得差集」

微信微博点赞,收藏,标签
  1. 点赞 SADD ?like:{消息ID} ?{用户ID}
  2. 取消点赞 SREM like:{消息ID} ?{用户ID}
  3. 检查用户是否点过赞 SISMEMBER ?like:{消息ID} ?{用户ID}
  4. 获取点赞的用户列表 SMEMBERS like:{消息ID}
  5. 获取点赞用户数 SCARD like:{消息ID}

集合操作实现微博微信关注模型
  1. 诸葛老师关注的人: zhugeSet-> {guojia, xushu}
  2. 杨过老师关注的人: ?yangguoSet--> {zhuge, baiqi, guojia, xushu}
  3. 郭嘉老师关注的人: guojiaSet-> {zhuge, yangguo, baiqi, xushu, xunyu)
  4. 我和杨过老师共同关注: SINTER zhugeSet yangguoSet--> {guojia, xushu}
  5. 我关注的人也关注他(杨过老师): SISMEMBER guojiaSet yangguo SISMEMBER xushuSet yangguo
  6. 我可能认识的人: 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有序集合结构
  1. 点击新闻 ZINCRBY ?hotNews:20190819 ?1 ?守护香港
  2. 展示当日排行前十 ZREVRANGE ?hotNews:20190819 ?0 ?9 ?WITHSCORES
  3. 七日搜索榜单计算 ZUNIONSTORE ?hotNews:20190813-20190819 ?7 hotNews:20190813 ?hotNews:20190814... hotNews:20190819
  4. 展示七日排行前十 ZREVRANGE hotNews:20190813-20190819 ?0 ?9 ?WITHSCORES

文章来源:https://blog.csdn.net/one_dayR/article/details/135070440
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。