首页 > 数据库 >赶紧收藏!2024 年最常见 20道 Redis面试题(七)

赶紧收藏!2024 年最常见 20道 Redis面试题(七)

时间:2024-05-26 18:31:21浏览次数:31  
标签:面试题 20 Redis volatile 内存 使用 淘汰 减少

上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(六)-CSDN博客

十三、Redis如何做内存优化?

Redis是一个内存中的数据存储系统,因此内存优化对于提高性能和降低成本至关重要。以下是一些Redis内存优化的方法:

  1. 选择合适的数据类型

    • 根据实际存储的数据特征选择合适的数据类型,比如使用整数代替字符串可以减少内存占用。
  2. 使用内存效率更高的数据结构

    • 比如使用哈希表代替字符串来存储对象,可以减少内存的冗余。
  3. 内存碎片整理

    • Redis 4.0及以上版本支持自动内存碎片整理(active defragmentation),可以在运行时减少内存碎片。
  4. 设置合理的内存限制

    • 使用maxmemory配置项设置Redis可以使用的最大内存量,避免内存使用过多。
  5. 使用内存淘汰策略

    • 当达到内存上限时,Redis可以根据配置的淘汰策略(如LRU、LFU等)来释放内存。
  6. 优化持久化

    • 调整RDB和AOF持久化策略,减少对性能的影响。比如,可以减少RDB快照的频率,或者调整AOF的appendfsync设置。
  7. 使用Redis Cluster

    • 通过Redis Cluster进行数据分片,可以在多个实例之间分散内存使用。
  8. 压缩列表

    • 对于列表和集合等数据结构,可以使用压缩列表来减少内存占用。
  9. 优化键值命名

    • 使用简洁的键名,减少键名的内存占用。
  10. 定期清理无用键

    • 定期检查和删除不再使用的键,释放内存。
  11. 使用管道技术

    • 使用PIPELINE命令减少网络往返次数,减少内存占用。
  12. 避免大对象

    • 避免存储大对象,如果必须存储,考虑将其分割成小块。
  13. 使用过期策略

    • 设置键的过期时间,让Redis自动清理过期的数据。
  14. 监控内存使用

    • 使用INFO MEMORY命令监控内存使用情况,及时发现内存使用问题。
  15. 调整TCP缓冲区大小

    • 调整TCP接收和发送缓冲区大小,减少内存占用。
  16. 优化客户端连接

    • 使用连接池来减少连接建立和销毁的开销。
  17. 使用内存分析工具

    • 使用如redis-cli --bigkeys等工具分析内存使用情况,找出内存使用大的键。
  18. 调整操作系统的内存管理

    • 调整操作系统的内存管理策略,比如Linux的transparent huge pages(THP)设置。
  19. 使用更高效的序列化格式

    • 如果使用持久化或复制,使用更高效的序列化格式来减少内存占用。
  20. 代码层面优化

    • 在代码层面减少不必要的内存分配,比如避免频繁创建和销毁对象。

通过这些内存优化措施,可以有效地管理Redis的内存使用,提高其性能和可扩展性。需要注意的是,内存优化是一个持续的过程,需要根据实际使用情况不断调整和优化。

十四、Redis的内存用完了会发生什么?

当Redis的内存使用达到配置的最大内存限制(由maxmemory配置项设置)时,会发生以下几种情况之一,具体取决于配置的内存淘汰策略:

  1. 所有客户端命令被拒绝

    • 如果没有设置任何内存淘汰策略,或者设置了noeviction策略,当内存达到上限时,Redis会拒绝所有会修改数据集的命令,如SETLPUSH等,但仍然会响应那些只读命令。
  2. 挥发性键的淘汰

    • 如果设置了挥发性键的淘汰策略(如volatile-lruvolatile-ttlvolatile-random),Redis将从设置了过期时间的键中选择淘汰键。volatile-lru策略会淘汰最近最少使用的键,volatile-ttl会淘汰将要过期的键,而volatile-random会随机淘汰一个挥发性键。
  3. 所有键的淘汰

    • 如果设置了allkeys-lruallkeys-randallkeys-ttl策略,Redis将从所有键中淘汰。allkeys-lru会淘汰最近最少使用的键,allkeys-rand会随机淘汰一个键,allkeys-ttl会淘汰将要过期的键。
  4. 只淘汰某些类型的键

    • 某些淘汰策略只会淘汰特定类型的键,例如volatile-lfuallkeys-lfu策略会淘汰最少使用的键,但volatile-lfu只考虑挥发性键。
  5. 子空间的淘汰

    • 如果使用了hash-max-ziplist-entrieshash-max-ziplist-value配置项,Redis会尝试在达到内存上限时,对哈希类型数据结构进行压缩,以减少内存使用。
  6. 内存碎片整理

    • Redis 4.0及以上版本支持自动内存碎片整理,当内存达到一定阈值时,Redis会自动进行内存碎片整理,以释放内存空间。
  7. 持久化文件的清理

    • 如果启用了AOF持久化,并且设置了aof-rewrite-incremental-fsync,Redis在进行AOF重写时会尝试减少fsync调用,以减少磁盘I/O操作,间接减轻内存压力。
  8. 触发警告

    • 当内存使用接近上限时,Redis可能会在日志中记录警告信息,提醒管理员注意内存使用情况。
  9. 触发OOM(内存不足)错误

    • 在极端情况下,如果操作系统的内存也非常紧张,Redis进程可能会因为无法分配更多内存而触发OOM(Out of Memory)错误,导致服务崩溃。

为了避免Redis内存耗尽导致的服务中断或数据丢失,建议采取以下措施:

  • 合理设置maxmemory配置项,确保有足够的内存空间。
  • 根据业务需求选择合适的内存淘汰策略。
  • 定期监控内存使用情况,及时发现并处理内存问题。
  • 考虑使用Redis Cluster进行数据分片,分散内存压力。
  • 对于不常用的数据,考虑使用更经济的存储方案。

通过这些措施,可以最大限度地减少Redis内存耗尽带来的风险。

标签:面试题,20,Redis,volatile,内存,使用,淘汰,减少
From: https://blog.csdn.net/weixin_42922481/article/details/139218492

相关文章

  • CSP历年复赛题-P1095 [NOIP2007 普及组] 守望者的逃离
    原题链接:https://www.luogu.com.cn/problem/P1095题意解读:在有限的时间内,通过跑步或者闪烁两种方式,能跑出的最远距离是多少,以及是否能跑出出口。解题思路:1、贪心法每一秒钟,都有两种选择:跑步(17米)、闪烁(60米,前提是蓝够10点,否则等待1s恢复4点蓝)经过计算,恢复足够的蓝到闪烁需要3.......
  • ISCC2024个人挑战赛WP-MISC
    (非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) whereisflag下载附件,解压出pyc,然后到下面网址反编译python反编译-在线工具记住c,是密文,Key是k5fgb2eur5styn0lve3t6r1sAESecb解密解密网址:https://www.lddgo.net/encrypt/aes成语学习压缩包密码:5......
  • ISCC2024个人挑战赛WP-WEB
    (非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) 还没想好名字的塔防游戏GET/world.jsHTTP/1.1Host:101.200.138.180:17345Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed......
  • Nexus未授权目录穿越漏洞(CVE-2024-4956)
    漏洞描述该漏洞允许远程攻击者通过构造特制的HTTP请求,在未经身份验证的情况下访问系统文件,该漏洞由于应用程序在处理文件路径输入时没有进行严格的验证和过滤,导致攻击者可以通过特定的目录穿越字符序列访问到应用程序根目录之外的文件fofaapp="Nexus-Repository-Manager"POCG......
  • 2024年Java面经(附答案)
    目录一、Java基础部分面试题二、第三方框架部分三、MySQL数据库部分四、Redis部分一、Java基础部分面试题1.Java面向对象的三个特征封装:对象只需要选择性的对外公开一些属性和行为。继承:子对象可以继承父对象的属性和行为,并且可以在其之上进行修改以适合更特殊的场......
  • SAP S4HANA2023 PCE系统上的VKM3?
    SAPS4HANA 2023PCE系统上的VKM3?  在SAPS4HANA2023PCE系统上,试图执行事务代码VKM3,为某个销售订单释放客户信用冻结,系统报错:无法执行事务VKM3(SAPNote2476734),     详细报错信息: 无法执行事务VKM3(SAPNote2476734)消息编号00977诊断系统配置(黑......
  • STM32 F1系列 全中文HAL&LL库使用手册 中英双语对照 GPT机翻 共1208页、约40万字
    STM32F1系列全中文HAL_LL库使用手册,中英文双语对照阅读。内容、格式对照官方原文,含标签导航及目录跳转。全文GPT机翻,除人工翻译外,相对更加贴合原文原意,双语版防止翻译错误方便对照。全文:1208页,约40万字。*******下有更多展示图片********由于本汉化不改变官方文档的内容......
  • 记录一次Redisson使用synchronized和分布式锁不生效的原因
    最近在开发的过程中,遇到了一个并发场景,用户进行方案复制的时候,当快速点击两次操作的时候,出现了复制方案重名的情况,实际上是复制方案的方案名称,是由后端根据数据库已有的方案名称和当前要复制的方案名称进行逻辑处理,保证方案名称不能重复,比如:要复制的方案名称为“我的方案”,......
  • [SHOI2007]书柜的尺寸 题解
    题目链接设\(f_{i,t1,t2}\)表示前\(i\)本书,第一层的宽度为\(t1\),第二层的宽度为\(t2\),所需要的最小高度。第三层宽度\(t3=\sum_{i=1}^{i}t_i-t1-t2\)。但本题还有一个重要限制:每层的高度取决于该层最高的书,如果直接按照顺序加入书本,从\(dp\)的状态来看,无法确定新书本......
  • 服务器部署Redis
    前言:reids历史版本网址:https://download.redis.io/releases/远程服务器:CentOS7.6(本地VM也一样)连接:XShell7与Xftp7图形化桌面:RDM1.安装Redis1)解压并安装Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖。查看是否安装成功:rpm-qa|......