文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

面试官问:Redis 缓存淘汰策略有哪些?

2024-11-29 19:59

关注

本小节不仅适用于工作,也是面试的高频问题。

文章导读

Redis内存分析

1.Redis默认内存是多少?

在 64bit 系统下,默认不限制内存大小,不设置内存大小和maxmemory = 0表示不限制 Redis 内存使用

2.如何查看Redis最大内存是多少?

命令行:

127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "0"

配置文件 redis.conf:

# maxmemory 

3.如何查看Redis内存使用情况?

127.0.0.1:6379> info memory

4.如何配置和修改?

临时方案,通过命令修改:

127.0.0.1:6379> config set maxmemory 104857600
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "104857600"

永久方案,通过配置文件:

5.生产环境如何配置?

建议:一般取物理内存的3/4

Redis过期键删除?

我们知道,redis一般会设置过期时间。那么这些键过期了是立刻从内存中删除吗?

通常,键删除会有不同的策略。

1.立刻删除

立即删除能保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是删除操作会占用cpu的时间,造成CPU额外的压力。

redis.conf 中,通过调整过期键的检测频率:

# The range is between 1 and 500, however a value over 100 is usually not
# a good idea. Most users should use the default of 10 and raise this up to
# 100 only in environments where very low latency is required.
hz 10

但是这会产生大量的性能消耗,同时也会影响数据的读取操作。

2.惰性删除

数据到达过期时间,不做处理。等下次访问该数据时:

惰性删除策略的缺点是,它对内存是最不友好的。如果一个键已经过期,而这个键又仍然保留在redis中,那么只要这个过期键不被删除,它所占用的内存就不会释放。

#开启憜性淘汰
lazyfree-lazy-eviction=yes

3.定期删除

这种方案有效规避上述两种极端情况, 定期删除策略的难点是确定删除操作执行的时长和频率:

Redis内存淘汰策略

基于上述的了解,假如:

上述两个步骤,依然会有大量过期的key堆积在内存中,导致redis内存空间紧张或者很快耗尽。

因此,有没有一个更好的兜底方案......?这就是要讲的淘汰策略

1.LRU和LFU区别?

(1) LRU(Least Recently Used,最近最少使用页面置换算法)

假设我们有一个容量为3的LRU缓存,访问数据的顺序如下:

原理:如果数据最近被访问过,那么在不久的将来它很可能再次被访问。因此,LRU会淘汰最长时间未被访问的数据。

适用场景:适用于最近被访问的数据在未来某个时间点很可能再次被访问。

(2) LFU(Least Frequently Used,最近最不常用页面置换算法)

假设我们有一个容量为3的LFU缓存,访问数据的顺序如下:

原理:LFU算法会跟踪每个页面在特定时间段内被访问的频率。当需要淘汰页面时,LFU算法会淘汰在该时间段内访问次数最少的页面。

适用场景:LFU算法适用于那些访问模式可能随时间变化的场景,或者访问频率能够较好地反映页面重要性的情况。

(3) 小结

2.Redis有哪些淘汰策略?

redis.config 配置文件中,

# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key having an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.

解释下:

3.生产如何选择淘汰策略?

在生产环境中选择缓存淘汰策略时,通常需要根据应用的具体需求和数据特性来定。这里给出常见案例:

(1) 电商平台的商品推荐

电商平台需要为用户展示个性化的商品推荐,其中热门商品的访问频率较高。可选择:LFU(Least Frequently Used)

redis-cli config set maxmemory-policy allkeys-lfu

因为LFU策略可以保留访问频率高的商品,确保推荐列表中展示用户最可能感兴趣的商品。

(2) 金融交易平台的实时数据

金融交易平台需要提供实时的股票价格和交易数据,数据的实时性至关重要。过期的时价被淘汰。

可选择:TTL(Time To Live)结合LRU(Least Recently Used)

redis-cli config set maxmemory-policy volatile-lru

TTL确保数据在一定时间后自动过期,而LRU保证最近访问的数据被优先保留。

(3) 电信运营商的用户数据管理

电信运营商需要处理和缓存大量用户的通话记录、短信记录等,用户通常更关心最近的通信记录。

可选择:LRU(Least Recently Used)

redis-cli config set maxmemory-policy allkeys-lru

因为LRU策略可以确保最近生成的通话记录和短信记录被优先缓存。

(4) 社交媒体平台的用户动态

社交媒体平台需要为用户展示好友的最新动态和帖子,用户通常对最新动态感兴趣。

可选择:LRU

redis-cli config set maxmemory-policy allkeys-lru

因为LRU可以保证最新的帖子被优先展示。

好了,今天就聊到这里,读者可依据实际情况择优选择策略。

来源:码易有道内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯