7个Redis的应用场景

来源:互联网 发布:五邑大学网络教学平台 编辑:程序博客网 时间:2024/06/09 21:09

缓存–热数据

  • 热点数据(经常会被查询,但是不经常被修改或删除的数据)
  • 相比memcached更丰富的数据类型

mark一种情况:通常select查询数据库前查询redis,有的话使用redis数据,没有则查询数据库,然后将数据插入redis;通过update或者delete数据库时,先查询redis中是还是有该数据,存在的话先删除redis中的数据,再进行数据库的update或者delete;但是在高并发的情况下,在redis中该条数据被删除后,这时另一个线程执行查询,发现没有,会插入一条数据在redis中,然后在数据库中update或者delete,这时redis串的数据都是错的,直到下一条update或者delete。
方法:先updater后clean,万一clean失败,放入mq,后续继续处理,失败次数太多条件触发监控通知人工。

计数器

  • 诸如统计点击数等应用。由于单线程,可以避免并发问题,保证不会出错,而且100%毫秒级性能。
  • 命令:INCRBY;注意持久化。

队列

  • 相当于消息系统,ActiveMQ,RocketMQ等工具类似,数据一致性要求较高还是建议使用RocketMQ等专业系统。
  • 由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以判断用户是第几个访问这种业务。
  • 队列不仅可以把并发请求变成串行,并且可以做队列或者栈使用。

位操作(大数据处理)

  • 用于数据量上亿的场景下,例如几亿用户系统的签到,去重登录次数的统计,某用户是否在线状态等等。

一种情景:腾讯10亿用户,几毫秒内查询某个用户是否在线,可以使用位操作–setbit、getbit、bitcount命令。redis内构建一个足够长的数组,每个数组元素只能是用0和1两个值,然后这个数据的下标index用来表示这个例子里面用户的ID(必须是数字),那么这个几亿长的大数组就能通过下标和值(0和1)来构建一个记忆系统。

分布式锁与单线程机制

  • 验证前端的重复请求(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request IP、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交
  • 秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”。
  • 全局增量ID生成,类似“秒杀”

最新列表

  • 例如新闻列表页面最新的新闻列表,如果数量很大的情况下,尽量不要使用select a from A limit 10这个low货,尝试redis的LPUSH命令构建List,一个个顺序都塞进去就可以啦。不过万一内在清掉怎么办?也简单,查询不到存储Key的话,用mysql查询并且初始化一个List到redis中就好了。

排行榜

  • 得分高的排名在上。命令:ZADD(有续集,sorted set)。

文章转载自:今日头条–“全掌柜技术客“

原创粉丝点击