美文网首页
Redis问题汇总

Redis问题汇总

作者: Franck_ | 来源:发表于2020-11-09 16:28 被阅读0次

    为什么要使用Redis ?

    速度快 ,走内存, 不用去查硬盘,内存速度比硬盘快很多 。
    可以利用分布式线程安全的特性,操作一些相关的业务。 多个WEB服务器,同时操作1条要求线程安全的数据。

    Redis为什么那么快?

    基于内存

    Redis大KEY怎么处理?

    Redis过期时间怎么处理?

    Redis 雪崩的处理?

    同一个时间点,缓存全部过期(或者缓存故障),这时候,全部的请求到达数据库。 导致数据库压力瞬间过高。

    事前:
    保证redis高可用(集群模式,哨兵模式)。
    ehcache,二级缓存, 小范围缓存。

    发生的时候(事中):
    Hystrx
    限流+降级: 对数据库进行限流,避免将数据库弄宕机。
    例如,数据库可以承担2000个请求, 现在由于缓存挂了导致5000请求到达数据库。 限制2000个请求到达数据库, 剩下的3000个请求走降级逻辑。

    事后:
    尽快重启,恢复Redis。要开启持续化,保证Redis数据不丢失。

    Redis穿透的处理?

    多个请求都没有对应的缓存,每次都会去数据库查询。可能每次数据库里面都没有找到数据, 这样每次都会去查库, 但是每次都不会缓存。

    可以将这些缓存穿透这些请求key,放一个对应的空value,这样,下次请求的时候可以返回空值。

    会有几个问题:

    1. 如果这个key,下次在数据库里面有值,这样就查不出来。
    2. 如果每次的key都不一样, 每次都缓存,意义也不大。
    3. 这样会产生大量的key占用了redis的空间。

    问题1, 可以将这缓存设置一个比较短的过期时间 ,5秒~10秒,过期,这样下次就可以进行数据库查询了。

    Redis 击穿的处理?

    缓存击穿是穿透的一个特殊的表现,有一个热点的key,承接着大量的并发, 这时候过期了, 这大量的并发会直接到达数据库, 这个就叫做缓存击穿。

    热点数据不过期,数据有更新的时候,进行redis更新。
    会导致Redis占用过大。 有的热点数据可能过几个月就不是热点了。

    给热点数据续期,每次访问,修改热点数据的key的有效期。写一些逻辑,这个数据访问了1000次,给续期一下, 然后清零,再次到达1000次访问,再次续期清零。

    分布式锁, 例如1w个请求, 同时到达,只有1个能够获取到锁,然后去数据库里面查询,将数据放到redis, 那么剩下的请求就可以到达redis里面去获取到数据了。

    Redis的删除机制是怎么样的?

    100毫秒随机检查一些KEY ,是过期的key就删除。 每次获取key的时候,先检查这个key是否过期,如果过期,就删除掉。

    针对已经过期的内存
    还有就是内存淘汰机制:

    线程安全原理? 为为什么线程安全?

    单线程。

    热点数据的处理, 怎么设置过期时间?如何续期?

    Redis里面的结构?槽位?

    Redis装满了怎么办?

    纵向扩展。搭建集群模式。

    怎么保证高可用?

    Master 结点一定要开启持持久化。
    不然Master一重启,就会将所有空数据同步到salve。全部结点清空。

    怎么保证高并发?

    读写分离,用多个Redis支撑读。10w并发以下,1主多从架构。

    使用哨兵模式和使用集群模式。

    主从复制和哨兵的原理是怎么样的?

    主从复制的半同步是什么意思?

    如何保证Redis绝对不丢数据?

    相关文章

      网友评论

          本文标题:Redis问题汇总

          本文链接:https://www.haomeiwen.com/subject/vaalbktx.html