前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 内存优化案例

Redis 内存优化案例

作者头像
dys
发布2018-04-03 17:11:58
1.4K0
发布2018-04-03 17:11:58
举报
文章被收录于专栏:性能与架构

在Redis的配置文件中有这么两项配置: hash-max-ziplist-entries 512 hash-max-ziplist-value 64 其中的‘ziplist’代表数据结构,是一种数据压缩方式,作用是减少内存的使用空间 在某个阀值范围内,hashtable会使用ziplist,对数据进行压缩,超出阀值后,会自动转为使用正常的hashmap结构 上面这两项就是定义这个阀值 hash-max-ziplist-entries 512 当hashtable中的条目数量在512以下时,使用ziplist hash-max-ziplist-value 64 当hashtable中每个key/value的长度都小于64字节时,使用ziplist 以上2个条件中,任意一个条件超过设置值时,就不再使用ziplist了 案例 之前在网上看过一个案例,介绍了Instagram使用这项配置的实践经验 Instagram是一个超大型的图片类应用,他们有一个需求

根据图片ID得到作者ID 最简单的实现方式就是使用string类型

图片ID为KEY,作者ID为VALUE,一条一条的set/get 经测试,图片量为3亿时,一共需要20G左右的内存 经过一些优化后,效果不明显,他们便向Redis的一个开发者咨询解决方案

得到的建议是: 对数据进行分段,使用hash结构 因为hash结构在一定数据量下会进行压缩存储,可以节约很多内存 经过反复测试,在他们的环境下,entries阀值为1000时最合适,超过的话,CPU的压力较大 所以,数据分段的方式为: 1000条数据为一段,放在一个hash表中 例如 图片ID为1234888 他在一个hash表中,这个hash表的key为 1234,里面有1000个field,其中就包括了 888,值为其作者ID

取1234888的作者ID时,就是取得key1234的hashtable中field888的值 经过测试,使用这种方式后,内存的使用量降到了5G左右,效果非常明显 类似的配置项还有:

list-max-ziplistzset-max-ziplist

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档