Redis 十三 一些问题

Redis删除机制

1.定期删除,每隔100ms去随机查3个设置了生存时间的key,如果过期,就删除;

2.惰性删除,当有人查看一个设置了生存时间的key时,检查是否过期,过期则删除。

 

Redis淘汰机制

在Redis内存满了的时候,如果再加入新的key,会开启淘汰机制。

volatile-lru:在设置了生存时间的key中,干掉一个最近最少使用的,类似有个队列,一个key被用过了,就排到后面去,淘汰的时候就会比较靠后找到它,最推荐。

allkeys-lru:在所有的key中,干掉一个最近最少使用的。

allkeys-lfu:在设置了生存时间的key中,干掉一个最近最少频次使用的,类似记录使用频率,频率少的,哪怕最近刚用过,也可能被淘汰。

allkeys-lfu:在所有的key中,干掉一个最近最少频次使用的。

volatile-random:在设置了生存时间的key中,随机干掉一个,简直离谱。

allkeys-random:在所有的key中,随机干掉一个,更加离谱。

volatile-ttl:在设置了生存时间的key中,干掉一个剩余时间最少的。

noeviction:直接报错,默认的机制。

-----------------------------------------------------

设置淘汰机制

maxmemory-policy noeviction

设置最大内存

maxmemory 1024000000

 

Redis缓存问题

缓存穿透:查询的数据,Redis和数据库中都没有,这样大量的查询,会导致redis和数据库都宕机。

     1.如果是通过id查询,id是自增的,可以首先在业务上排除小于0,然后将数据库中id的最大值放到redis中,查询时比较一下,超出这个值,根本不用查;

     2.如果id不是整形,可以将全部的id放到set中,在查询前去set中查看一下,有才查;

     3.限制某个高频次访问ip的访问次数,甚至拉入黑名单。

 

缓存击穿:在一个热点缓存正好过期的时候,大量访问突然来访,于是只能去访问数据库,造成数据库宕机。

     1.在访问缓存中没有的时候,添加一个锁,只让几个请求去访问数据库,然后新增该缓存,分布式锁可以解决该问题;

         2.去掉热点缓存的生存时间,不推荐。

 

缓存雪崩:当大量缓存(未必是热点缓存)同时到期时,大量请求同时访问数据库,导致宕机。

        1.将缓存的生存时间设置成不一样的,避免同时到期。

 

缓存倾斜:大量热点数据都在一台redis节点上,导致无法承受。

     1.给这个节点加主从。

posted @ 2020-12-15 19:29  luytest  阅读(74)  评论(0编辑  收藏  举报