redis初学 — redis数据类型(type)应用场景

redis主要有以下5种数据类型:

 

通过百度归类他们的应用场景有:

1,String

a,json字符串

  json字符串可以转化为map、list、自定义java对象等;

  适用于存储有时效性的用户登录信息、支付宝支付二维码信息、付费接口但不频繁更新的报文信息(如工商、税务等接口);

b,计数

  incr、decr相关的递增、递减命令对于redis(单线程)是安全的原子性操作,最终总能得到正确的计数值;

  而get/set无法得到正确的值,可能是因为,比如浏览器上有一篇文章,张三在他的电脑上点赞了,请求来到了后台服务器A,同时李四也在他的电脑上点赞了,请求也来到了后台服务器A,如果后台服务器A使用多线程(一般也如此)线程1和线程2处理了这两个人的请求,线程1去redis请求get原点赞数是66,同时线程2也去redis请求get原点赞数也是66,线程1处理好后去redis请求set点赞数为(+1)67,线程2处理好后也去redis请求set点赞数为(+1)67,不管线程1线程2谁先谁后,最终的点赞数是67,而不是期望的正确值68。而incr不会出现这个问题,是因为线程1、线程2都去redis请求原点赞数+1,因为redis是单线程的,比如先处理线程1的请求,那么点赞数变成67,再处理线程2的请求,点赞数变成68,即得到了期望的正确值68。他们之间的区别是因为线程1、线程2把获得原点赞数这个步骤交给了redis去处理,而不是自己去获得原点赞数;redis是单线程的,操作都是原子性的,包括get/set。

  适用于微博数、评论数、点赞数、粉丝数等需要计数的场景;

c,分布式锁

  执行setnx key value命令,如果key原先不存在,则返回1(设置成功);key已存在返回0(设置失败);

  分布式的多个服务器请求同一个资源,先执行该命令竞争“锁”,返回1的服务器即获得锁,可以使用该资源,并在最后释放(删除)该key(锁);

 

2,Hash

  购物车:

  

   

3,List

  最新新闻消息

  

   

4,Set

a,标签

  斗鱼主播标签、qq账号好友给的评价标签;

b,共同爱好、二度好友

  多个集合可以方便地获得交集;

c,统计访问ip

 

5,Zset

  各种排行榜单

posted @ 2021-02-24 15:16  seeAll  阅读(671)  评论(0编辑  收藏  举报