Redis内存淘汰策略

系列文章目录

Redis缓存不一致问题如何解决
使用Redis缓存数据可能需要的问题


前言

在分布式系统中,为了提高系统的性能,会使用到Redis来作为缓存中间件,将一部分数据库中的数据存储到缓存中,但是不会把数据库中的数据全部都放到缓存中,而是将其中一部分热点数据放入缓存中。但是Redis是基于内存来操作的,内存容量相比磁盘小的非常多,大部分情况可能16个G,用10个G来缓存数据。当内存容量快满了,应该触发什么机制,这个是我们需要考虑的。

一、如何给Redis设置缓存淘汰策略?

在Redis的配置文件中,可以配置缓存容量大小,已经当缓存容量到达之后触发什么样的机制;

缓存容量的设置
maxmemory 300mb

内存淘汰策略
maxmemory-policy volatile-lru

二、内存淘汰策略

在Redis4.0之前,提供了6种策略供选择;
针对设置了过期时间

  1. volatile-ttl:在筛选时,会针对过期时间的键值对,根据过期时间的先后进行删除,越早过期的越背删除。
  2. volatile-random:在设置了过期时间的键值对中,随机选择删除;
  3. volatile-lfu:会使用lfu算法,在设置了过期时间的键值对中进行删除;
  4. volatile-lru:会使用lru算法,在设置了过期时间的键值对中进行删除;
    针对全部键值对
  5. allkeys-random:在所有的键值对中随机选择删除;
  6. allkeys-lfu:在所有的键值对中使用lfu算法进行删除;
  7. allkeys-lru:在所有的键值对中使用lru算法进行删除;
  8. noenviction:不会剔除数据,当数据达到了设置的最大内存或者系统容量满了,拒绝所有的写操作,并向客户端抛出错误信息:“(erro)OOM command not allowed when used memory”,并且此时只响应读请求;

1.TTL算法

根据设置了过期时间的键值对,ttl算法会根据剩余过期时间进行排序,即将越早过期的key,越会被删除。

2.LRU算法(Least recently used)

lru算法是最近最少使用算法,表示从需要被过滤的数据中心,找出最近一段时间内,没有被访问过的数据,以最近一次访问时间作为参考。

3.LFU算法(Least frequently Used)

lfu算法是最近访问次数最少的算法,找出一段时间内,使用次数最少的数据,以访问次数作为参考。

4.LRU和LFU对比

lfu适合热点数据,效率会比较高。lru适合大部分场景。
1、当有一些热点数据频繁被访问,根据lfu算法的特点,这些键值对肯定是不会被删除的,但如果是周期性的热点key,使用lru算法可能会被删除了。
2、当有一批次数只在某个时刻被访问,而且频率很高,过了这个时间点就不会被访问了,使用lfu会导致这些数据过了这个时间点后不会被删除,而使用lru则不需要考虑,在一段时间内没有被访问就会被删除了。

总结

以上就是我对如何解决缓存不一致问题的个人见解,如果有其他方案,欢迎评论区建言献策。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值