Redis开发运维实践开发设计规范之内存考虑

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

4.4 内存考虑

  1. 只要有可能的话,就尽量使用散列键而不是字符串键来储存键值对数据,因为散列键管理方便、能够避免键名冲突、并且还能够节约内存。

    具体实例: 节约内存:Instagram的Redis实践 blog.nosqlfan.com/html/3379.html

  2. 如果将redis作为cache进行频繁读写和超时删除等,此时应该避免设置较大的k-v,因为这样会导致redis的 内存碎片增加,导致rss占用较大,最后被操作系统OOM killer干掉。一个很具体的issue例子请见:https://github.com/antirez/redis/issues/2136

  3. 如果采用序列化考虑通用性,请采用json相关的库进行处理,如果对内存大小和速度都很关注的,推荐使用messagepack进行序列化和反序列化

  4. 如果需要计数器,请将计数器的key通过天或者小时分割,比如下边的设计:

    需要修改为:

    更好的一个设计是采用hash:

  5. 各种数据结构及其占用内存的benchmark测试

set个数 每个set的元素总数 内存占用 Key大小 Value大小
100 100 1.88M 7 36
100 1000 10.75M 7 36
100 10000 111.12M 7 36
1000 100 11.59M 8 36
1000 1000 100.35M 8 36
1000 10000 1.08G 8 36
10000 100 108.71M 9 36
10000 1000 996.23M 9 36
zset个数 每个zset的元素总数 内存占用 Key大小 Value大小
100 100 1.62M 8 49
100 1000 15.91M 8 49
100 10000 162.06M 8 49
1000 100 8.71M 9 49
1000 1000 151.87M 9 49
1000 10000 1.58G 9 49
10000 100 79.83M 10 49
10000 1000 1.48G 10 49
hash个数 每个hash的元素总数 内存占用 Key大小 Value大小
100 100 1.63M 8 49
100 1000 6.29M 8 49
100 10000 156.91M 8 49
1000 100 8.71M 9 49
1000 1000 55.59M 9 49
1000 10000 1.52G 9 49
10000 100 79.83M 10 49
10000 1000 548.58M 10 49
list个数 每个list的元素总数 内存占用 Key大小 Value大小
100 100 1.23M 8 36
100 1000 10.00M 8 36
100 10000 92.40M 8 36
1000 100 4.83M 9 36
1000 1000 92.52M 9 36
1000 10000 916.47M 9 36
10000 100 40.76M 10 36
10000 1000 917.69M 10 36
string个数 内存占用 Key大小 Value大小
100 846.79K 13 36
1000 966.29K 13 36
10000 2.16M 13 36
100000 130.88M 13 36

Redis开发运维实践指南
本文为《Redis开发运维实践指南》内容,该书作者为黄鹏程,已授权云栖社区转载。
相关文章
|
1月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
2月前
|
存储 运维 安全
运维知识沉淀工具深度解析:从结构设计到落地实践全拆解
运维知识沉淀工具助力团队将零散经验结构化存储,实现问题处理路径标准化、知识复用化。通过标签、模板与自动化调取机制,让每次处理都留下可复用资产,提升团队协同效率与系统稳定性。
|
1月前
|
机器学习/深度学习 人工智能 运维
三重Reward驱动的运维智能体进化:多智能体、上下文工程与强化学习的融合实践
这篇文章系统性地阐述了 AI 原生时代下,面向技术风险领域的智能体系统(DeRisk)的架构设计、核心理念、关键技术演进路径与实践落地案例。
三重Reward驱动的运维智能体进化:多智能体、上下文工程与强化学习的融合实践
|
2月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
144 0
|
2月前
|
边缘计算 算法 Java
Java 绿色计算与性能优化:从内存管理到能耗降低的全方位优化策略与实践技巧
本文探讨了Java绿色计算与性能优化的技术方案和应用实例。文章从JVM调优(包括垃圾回收器选择、内存管理和并发优化)、代码优化(数据结构选择、对象创建和I/O操作优化)等方面提出优化策略,并结合电商平台、社交平台和智能工厂的实际案例,展示了通过Java新特性提升性能、降低能耗的显著效果。最终指出,综合运用这些优化方法不仅能提高系统性能,还能实现绿色计算目标,为企业节省成本并符合环保要求。
100 0
|
3月前
|
运维 监控 负载均衡
高效运维实践:常见问题的应对策略与实践经验
本文探讨了运维工作中的五大核心挑战及应对策略,涵盖负载均衡优化、数据库性能提升、系统监控预警、容器化与微服务运维等方面,旨在帮助企业提升系统稳定性与运维效率。
|
3月前
|
SQL 缓存 安全
深度理解 Java 内存模型:从并发基石到实践应用
本文深入解析 Java 内存模型(JMM),涵盖其在并发编程中的核心作用与实践应用。内容包括 JMM 解决的可见性、原子性和有序性问题,线程与内存的交互机制,volatile、synchronized 和 happens-before 等关键机制的使用,以及在单例模式、线程通信等场景中的实战案例。同时,还介绍了常见并发 Bug 的排查与解决方案,帮助开发者写出高效、线程安全的 Java 程序。
192 0
|
7月前
|
数据采集 机器学习/深度学习 人工智能
智能运维在IT管理中的实践与探索
【10月更文挑战第21天】 本文深入探讨了智能运维(AIOps)技术在现代IT管理中的应用,通过分析其核心组件、实施策略及面临的挑战,揭示了智能运维如何助力企业实现自动化监控、故障预测与快速响应,从而提升整体运维效率与系统稳定性。文章还结合具体案例,展示了智能运维在实际环境中的显著成效。
406 133
|
3月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。
|
7月前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
617 79