Redis的常见问题

1.key的生存时间到了,Redis会立即删除吗?

答:不会立即删除,分两种删除方式:

          定期删除:Redis每隔一段时间就会去查看Redis设置了过期时间的key,会在100ms的间隔中默认查看3个key。

          惰性删除:如果当你去查询一个已经过了生存时间的key时,Redis会先查看当前key的生存时间,是否已经到了,直接删除当前key,并且给用户返回一个空值。

2.Redis的淘汰机制

在Redis内存已经满的时候,添加了一个新的数据,执行淘汰机制。

  • volatile-lru:在内存不足时,Redis会再设置过了生存时间的key中干掉一个最近最少使用的key。

  • allkeys-lru:在内存不足时,Redis会再全部的key中干掉一个最近最少使用的key。

  • volatile-lfu:在内存不足时,Redis会再设置过了生存时间的key中干掉一个最近最少频次使用的key。

  • allkeys-lfu:在内存不足时,Redis会再全部的key中干掉一个最近最少频次使用的key。

  • volatile-random:在内存不足时,Redis会再设置过了生存时间的key中随机干掉一个。

  • allkeys-random:在内存不足时,Redis会再全部的key中随机干掉一个。

  • volatile-ttl:在内存不足时,Redis会再设置过了生存时间的key中干掉一个剩余生存时间最少的key。

  • noeviction:(默认)在内存不足时,直接报错。

指定淘汰机制的方式:maxmemory-policy具体策略,

设置Redis的最大内存:maxmemory 字节大小

 

缓存的常见问题

一.缓存穿透问题

问题出现的原因:查询的数据库,Redis中没有,数据库中也没有

解决方法:

1.根据id查询时,如果id是自增的,将id的最大值放到Redis中,在查询数据库之前,直接比较一下id

2.如果id不是整型,可以将全部的id放到set中,在用户查询之前,去set中查看一下是否有一个id

3.获取客户端的ip地址,可以将ip的访问添加限制

Redis的常见问题

二.缓存击穿问题

问题:缓存中的热点数据,突然到期了,造成了大量的请求都去访问数据库,造成数据库宕机?

解决方法:

1.在访问缓存中没有的时候,直接添加一个锁,让几个请求去访问数据库,避免数据库宕机

2.热点数据的生存时间去掉

Redis的常见问题

3.缓存雪崩问题

问题:当大量缓存同时到期时,最终大量请求的同时去访问数据,导致数据库宕机

解决方法:将缓存中的数据的生存时间,设置为30~60的一个随机时间

Redis的常见问题

4.缓存倾斜问题

问题:热点数据放在了一个Redis机点上,导致redis机点无法承受住大量的请求,最终Redis宕机

1.扩展主从架构,搭建大量的从节点,环节Redis的压力

2.可以在Tomcat中进行JVM缓存,在查询Redis之前,先去查询Tomcat中的缓存

Redis的常见问题