Redis不只是缓存,还有n多种你没发现的妙用( 三 )

  • 用RDB恢复内存状态会丢失很多数据,重放AOP日志又很慢 。Redis4.0推出了混合持久化来解决这个问题 。将 rdb 文件的内容和增量的 AOF 日志文件存在一起 。这里的 AOF 日志不再是全量的日志,而是自持久化开始到持久化结束的这段时间发生的增量 AOF 日志,通常这部分 AOF 日志很小 。于是在 Redis 重启的时候,可以先加载 rdb 的内容,然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放,重启效率因此大幅得到提升 。
  • 缓存雪崩和缓存穿透缓存雪崩是什么?
    假设有如下一个系统,高峰期请求为5000次/秒,4000次走了缓存,只有1000次落到了数据库上,数据库每秒1000的并发是一个正常的指标,完全可以正常工作,但如果缓存宕机了,每秒5000次的请求会全部落到数据库上,数据库立马就死掉了,因为数据库一秒最多抗2000个请求,如果DBA重启数据库,立马又会被新的请求打死了,这就是缓存雪崩 。
    Redis不只是缓存,还有n多种你没发现的妙用

    文章插图
     
     
    如何解决缓存雪崩
    事前:redis高可用,主从+哨兵,redis cluster,避免全盘崩溃
    事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL被打死
    事后:redis持久化,快速恢复缓存数据
    缓存穿透是什么?
    假如客户端每秒发送5000个请求,其中4000个为黑客的恶意攻击,即在数据库中也查不到 。举个例子,用户id为正数,黑客构造的用户id为负数,
    如果黑客每秒一直发送这4000个请求,缓存就不起作用,数据库也很快被打死 。
    Redis不只是缓存,还有n多种你没发现的妙用

    文章插图
     
     
    如何解决缓存穿透
    查询不到的数据也放到缓存,value为空,如set -999 “”
    总而言之,缓存雪崩就是缓存失效,请求全部全部打到数据库,数据库瞬间被打死 。缓存穿透就是查询了一个一定不存在的数据,并且从存储层查不到的数据没有写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义




    推荐阅读