用过Redis吗,它使用在哪些地方(使用场景)?

1. 用过Redis吗,它使用在哪些地方(使用场景)?

Redis是一种内存型数据库,用作数据库,缓存和消息代理。数据结构简单,读写速度快(毫秒级),原子操作。
适用于: 数据高并发读写、海量数据读写、对扩展性要求高的数据 的场景。

解决应用服务器的CPU和内存压力;
减少IO的读操作,减轻IO的压力;
关系型数据库的扩展性不强,难以改变表结构。

常见应用场景:

  1. 缓存: 热点数据(读多写少),减轻数据库压力。

  2. 数据共享: 分布式会话session

  3. 排行榜: 谁得分高谁排名往上。命令:ZADD(有续集,sorted set)

  4. 限时业务: 秒杀 存储登录者用户信息 存储短信验证码

  5. 分布式锁: 单独的服务,原子性(单线程)
    参考 java分布式锁终极解决方案之 redisson

  6. 最新列表
    List结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。Redis查询不到key,再MySQL查询

  7. 队列(消息队列)
    消息队列是大型网站必用中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis提供了 发布/订阅及阻塞队列功能 ,能实现一个简单的消息队列系统。如果对于 数据一致性 要求高的话还是用RocketMQ等专业系统。

    由于redis把数据添加到队列是返回添加元素在队列的第几位,所以可以做判断用户是第几个访问这种业务;队列不仅可以把并发请求变成串行,并且还可以做队列或者栈使用。

  8. 计数器: 统计点击数等 int类型,incrby(incr)命令,利用原子性(单线程,可以避免并发问题),性能好100%毫秒级
    浏览量(电商)、点赞数、收藏数、播放量、签到打卡、

  9. 限流: int类型,incrby(incr)命令
    以访问者的ip和其他信息作为key,访问一次增加一次计数,超过次数则返回false

  10. 时间轴(Timeline): 与最新列表场景类似

  11. 位统计(大数据处理): String类型的bitcount(1.6.6的bitmap数据结构介绍)
    字符是以8位二进制存储的

 set k1 a
setbit k1 6 1
setbit k1 7 0
get k1
/**
6 7 代表的a的二进制位的修改
a 对应的ASCII码是97,转换为二进制数据是01100001
b 对应的ASCII码是98,转换为二进制数据是01100010

因为bit非常节省空间(1 MB=8388608 bit),可以用来做大数据量的统计。
*/

参考
使用Redis的bitmaps统计用户留存率、活跃用户
用户日活月活怎么统计 - Redis HyperLogLog 详解


其他场景参考:
redis安装及应用场景
Redis的8大应用场景
Redis 16 个常见使用场景


更多面试题

标签: Java

添加新评论