redis的过期策略

1.Redis 的过期策略是怎么样的

  • Redis 的过期实现方法

    • Redis 通过设置过期时间来控制键值对的生命周期

      • 过期时间可以通过EXPIRE、EXPIREAT、PERSIST等命令设置,也可以在插入数据时直接设置过期时间。

  • Redis 的过期策略是怎么样的

    • Redis 的过期策略采用的是定期删除和惰性删除相结合的方式。

      • Redis 定期删除会每隔一定时间进行一次扫描,检查当前设置了过期时间的键,讲将过期的键删除,但不会立即释放内存,直到内存使用率达到一定阈值,会进行一次内存回收

      • 而惰性删除则是在键被访问时进行过期检查,如果过期了则删除键并释放内存。

2.Redis的内存淘汰策略是怎么样的?

  • 内存淘汰策略是什么:

    • Redis 的内存淘汰策略用于内存使用到达最大内存限制了之后,决定哪些 key 要被淘汰

    • Redis 可以通过配置文件中的 maxmemory-policy 参数来指定内存淘汰策略

  • Redis 支持的内存淘汰策略:

    • noeviction:不会淘汰任何键值对,而是直接返回错误信息。

    • allkeys-lru:从所有 key 中选择最近最少使用的那个 key 并淘汰。

    • volatile-lru:从设置了过期时间的 key 中选择最近最少使用的那个 key 并淘汰。

    • allkeys-random:从所有 key 中随机选择一个 key 并淘汰。

    • volatile-random:从设置了过期时间的 key 中随机选择一个 key 并淘汰。

    • volatile-ttl:从设置了过期时间的 key 中选择剩余时间最短的 key 并淘汰。

    • volatile-lfu:淘汰的对象是带有过期时间的键值对中,访问频率最低的那个。

    • allkeys-lfu:淘汰的对象则是所有键值对中,访问频率最低的那个。

3.过期可能导致的问题

3.1大批key瞬间过期导致读写效率降低

  • 如果出现了一批key同时过期,就需要删除大量的Key,而命令执行是单线程的,所以这时候后面来的业务操作请求,就需要等这个删除命令执行完才可以处理业务请求。

3.2 缓存击穿

  • 定义

    • 当某一key的缓存过期时大并发量的请求同时访问此key,瞬间击穿缓存服务器直接访问数据库,让数据库处于负载的情况。

  • 如何解决:

    • 当Redis中根据key获得的value值为空时,先锁上,然后从数据库加载,加载完毕,释放锁。

    • 通过定时任务去更新这个热点key,并重新设置其过期时间。

3.3缓存雪崩

  • 定义

    • 是指当大量缓存同时过期或缓存服务宕机,所有请求的都直接访问数据库,造成数据库高负载,影响性能,甚至数据库宕机。

  • 如何解决:

    • 把不同的key过期时间设置成不同的, 并且通过定时刷新的方式更新过期时间。
    • 采用集群方式部署,使用集群可以避免服务单点故障
  • 注意与缓存穿透 的区别
    • 缓存穿透 指缓存服务器中没有缓存数据,数据库中也没有符合条件的数据,导致业务系统每次都绕过缓存服务器查询下游的数据库,缓存服务器完全失去了其应用的作用。
    • 缓存穿透解决方案
      • 对不存在的值用Key缓存下来,把key对应的值设置为null并放到缓存中,这样再出现查询这个key 的请求的时候,直接返回null即可
      • 将查询的数据条件都哈希到一个足够大的布隆过滤器中,用户发送的请求会先被布隆过滤器拦截,一定不存在的数据就直接拦截返回了,从而避免下一步对数据库的压力
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值