MST

星途 面试题库

面试题:缓存设计之Redis内存优化基础

在Redis中,有哪些常见的内存优化配置参数?它们分别对Redis的内存使用和性能有什么影响?
30.7万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

1. maxmemory

  • 作用:设置Redis实例可使用的最大内存。当Redis使用的内存达到该值时,会根据maxmemory-policy配置的策略来处理新的数据写入请求。
  • 对内存使用影响:限制了Redis能使用的内存上限,防止因内存使用无节制而导致系统内存耗尽。
  • 对性能影响:如果设置过小,可能频繁触发内存淘汰策略,影响写入性能;设置过大,可能导致系统内存紧张,影响整体性能。

2. maxmemory-policy

  • 策略类型及作用
    • noeviction:默认策略,当内存达到maxmemory时,新的写入操作会返回错误,读操作仍正常。
    • volatile-lru:从设置了过期时间的键中,使用LRU(最近最少使用)算法淘汰键。
    • volatile-ttl:从设置了过期时间的键中,优先淘汰剩余TTL(存活时间)短的键。
    • volatile-random:从设置了过期时间的键中随机淘汰键。
    • allkeys-lru:从所有键中,使用LRU算法淘汰键。
    • allkeys-random:从所有键中随机淘汰键。
  • 对内存使用影响:不同策略决定了在内存不足时淘汰哪些键,直接影响内存的释放和新数据的写入空间。
  • 对性能影响lruttl相关策略相对更智能,能在一定程度上保留热点数据,对读性能影响较小;随机淘汰策略可能淘汰热点数据,影响读性能。noeviction策略在内存不足时阻止新写入,可能影响写性能。

3. hash-max-ziplist-entrieshash-max-ziplist-value

  • 作用:这两个参数用于控制哈希对象使用压缩列表(ziplist)编码的条件。hash-max-ziplist-entries表示哈希对象中元素个数的阈值,hash-max-ziplist-value表示哈希对象中单个值的最大长度。
  • 对内存使用影响:当哈希对象满足这两个条件时,使用压缩列表编码,相比普通哈希编码能节省内存。因为压缩列表是一种紧凑的数据结构,减少了内存碎片。
  • 对性能影响:压缩列表编码在读取和写入操作上性能略低于普通哈希编码,尤其是在元素较多时,因为压缩列表的操作需要遍历整个列表。但在内存节省方面有优势,适用于内存敏感场景。

4. list-max-ziplist-entrieslist-max-ziplist-value

  • 作用:类似哈希对象的相关参数,用于控制列表对象使用压缩列表编码的条件。list-max-ziplist-entries是列表元素个数阈值,list-max-ziplist-value是单个列表元素的最大长度。
  • 对内存使用影响:满足条件时使用压缩列表编码存储列表,可有效节省内存,因为压缩列表的紧凑结构减少了内存浪费。
  • 对性能影响:同样,压缩列表编码在读写操作上性能稍逊于普通列表编码,特别是在列表元素较多时,遍历操作开销较大,但能显著节省内存。

5. set-max-intset-entries

  • 作用:控制集合对象使用整数集合(intset)编码的条件。当集合中的所有元素都是整数且元素个数小于该阈值时,使用整数集合编码。
  • 对内存使用影响:整数集合是一种紧凑的、专门用于存储整数的编码方式,相比普通集合编码能大幅节省内存,尤其在元素都是整数且数量不多时。
  • 对性能影响:整数集合编码在添加、删除和查找操作上性能良好,因为其内部结构简单,查找效率高。但当元素个数超过阈值转换为普通集合编码后,性能和内存使用情况会改变。

6. zset-max-ziplist-entrieszset-max-ziplist-value

  • 作用:用于控制有序集合对象使用压缩列表编码的条件。zset-max-ziplist-entries是有序集合元素个数阈值,zset-max-ziplist-value是单个有序集合元素成员的最大长度。
  • 对内存使用影响:当有序集合满足这些条件时,使用压缩列表编码可节省内存,因为压缩列表紧凑的结构减少了内存占用。
  • 对性能影响:压缩列表编码在有序集合操作上性能相对普通编码方式会有一定损耗,尤其是在元素较多时,因为对压缩列表的操作需要遍历。但在内存节省方面表现出色。