百独托管7500 紫田网络超高转化播放器收cps[推荐]速盾CDN 免实名免备防屏蔽阿里云 爆款特卖9.9元封顶提升alexa、IP流量7Q5团队
【腾讯云】中小企福利专场【腾讯云】多款产品1折起高防 随时退换 好耶数据小飞国外网赚带你月入万元炎黄网络4H4G10M 99每月
香港带宽CN2/美国站群优惠中客数据中心 服务器租用联盟系统移动广告平台 中易企业专场腾讯云服务器2.5折九九数据 工信部正规资质
腾讯云新用户大礼包代金券高价收cpa注册量高价展示【腾讯云】2核2G/9.93起租服务器找45互联 随时退换阿里云 短信服务 验证秒达

[其它内容] Redis常用内存优化手段与参数 [复制链接]
查看:1145 | 回复:5

154

主题

671

帖子

586

积分

落伍者(一心一意)

Rank: 1

贡献
28
鲜花
1
注册时间
2013-4-4

落伍手机绑定

发表于 2013-4-5 19:50:18 | |阅读模式 来自 中国广东广州
常用内存优化手段与参数

通过我们上面的一些实现上的分析可以看出redis实际上的内存管理成本非常高,即占用了过多的内存,作者对这点也非常清楚,所以提供了一系列的参数和手段来控制和节省内存,我们分别来讨论下。

首先最重要的一点是不要开启Redis的VM选项,即虚拟内存功能,这个本来是作为Redis存储超出物理内存数据的一种数据在内存与磁盘换入换出的一个持久化策略,但是其内存管理成本也非常的高,并且我们后续会分析此种持久化策略并不成熟,所以要关闭VM功能,请检查你的redis.conf文件中 vm-enabled 为 no。

其次最好设置下redis.conf中的maxmemory选项,该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。

另外Redis为不同数据类型分别提供了一组参数来控制内存使用,我们在前面详细分析过Redis Hash是value内部为一个HashMap,如果该Map的成员数比较少,则会采用类似一维线性的紧凑格式来存储该Map, 即省去了大量指针的内存开销,这个参数控制对应在redis.conf配置文件中下面2项:

hash-max-zipmap-entries 64
hash-max-zipmap-value 512
hash-max-zipmap-entries

含义是当value这个Map内部不超过多少个成员时会采用线性紧凑格式存储,默认是64,即value内部有64个以下的成员就是使用线性紧凑存储,超过该值自动转成真正的HashMap。

hash-max-zipmap-value 含义是当 value这个Map内部的每个成员值长度不超过多少字节就会采用线性紧凑存储来节省空间。

以上2个条件任意一个条件超过设置值都会转换成真正的HashMap,也就不会再节省内存了,那么这个值是不是设置的越大越好呢,答案当然是否定的,HashMap的优势就是查找和操作的时间复杂度都是O(1)的,而放弃Hash采用一维存储则是O(n)的时间复杂度,如果

成员数量很少,则影响不大,否则会严重影响性能,所以要权衡好这个值的设置,总体上还是最根本的时间成本和空间成本上的权衡。

同样类似的参数还有:

list-max-ziplist-entries 512
说明:list数据类型多少节点以下会采用去指针的紧凑存储格式。

list-max-ziplist-value 64
说明:list数据类型节点值大小小于多少字节会采用紧凑存储格式。

set-max-intset-entries 512
说明:set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储。

最后想说的是Redis内部实现没有对内存分配方面做过多的优化,在一定程度上会存在内存碎片,不过大多数情况下这个不会成为Redis的性能瓶颈,不过如果在Redis内部存储的大部分数据是数值型的话,Redis内部采用了一个shared integer的方式来省去分配内存的开销,即在系统启动时先分配一个从1~n 那么多个数值对象放在一个池子中,如果存储的数据恰好是这个数值范围内的数据,则直接从池子里取出该对象,并且通过引用计数的方式来共享,这样在系统存储了大量数值下,也能一定程度上节省内存并且提高性能,这个参数值n的设置需要修改源代码中的一行宏定义REDIS_SHARED_INTEGERS,该值默认是10000,可以根据自己的需要进行修改,修改后重新编译就可以了。


另外redis 的6种过期策略
redis 中的默认的过期策略是volatile-lru 。设置方式   
config set maxmemory-policy volatile-lru

maxmemory-policy 六种方式
volatile-lru:只对设置了过期时间的key进行LRU(默认值)
allkeys-lru : 是从所有key里 删除 不经常使用的key
volatile-random:随机删除即将过期key   
allkeys-random:随机删除   
volatile-ttl : 删除即将过期的   
noeviction : 永不过期,返回错误  

maxmemory-samples 3 是说每次进行淘汰的时候 会随机抽取3个key 从里面淘汰最不经常使用的(默认选项)

文章远程来源http://www.tvvcd.com/  本文章连接http://www.tvvcd.com/news/84847/
电影http://www.tvvcd.com最新电影
头像被屏蔽

0

主题

159

帖子

44

积分

禁访

贡献
0
鲜花
0
注册时间
2013-4-2

落伍手机绑定

发表于 2013-4-8 16:56:30 | 来自 中国北京
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

309

主题

535

帖子

469

积分

保护或锁定(状态异常,请联系客服)

贡献
913
鲜花
0
注册时间
2012-12-2

落伍手机绑定

发表于 2013-4-8 20:50:34 | 来自 中国北京
优化后性能好多了吧

20

主题

110

帖子

18

积分

落伍者(一心一意)

Rank: 1

贡献
11
鲜花
0
注册时间
2013-3-1

落伍手机绑定

发表于 2013-4-10 11:57:01 | 来自 中国福建福州
顶!!!!!!!

53

主题

144

帖子

204

积分

落伍者(一心一意)

Rank: 1

贡献
221
鲜花
0
注册时间
2009-2-3
发表于 2013-4-12 08:51:57 | 来自 中国山东济南
谢谢楼主~~~学习了~~~ 顶····
头像被屏蔽

0

主题

551

帖子

312

积分

落伍者(一心一意)

Rank: 1

贡献
122
鲜花
1
注册时间
2005-5-15

落伍手机绑定

发表于 2013-4-12 16:35:28 | 来自 中国山东德州
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
论坛客服/商务合作/投诉举报:2171544 (QQ)
落伍者创建于2001/03/14,本站内容均为会员发表,并不代表落伍立场!
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论!
落伍官方微信:2030286 邮箱:(djfsys@gmail.com|tech@im286.com)
© 2001-2014

浙公网安备 33060302000191号

浙ICP备11034705号 BBS专项电子公告通信管[2010]226号

  落伍法律顾问: ITlaw-庄毅雄

手机版|找回帐号|不能发帖?|Archiver|落伍者

GMT+8, 2024-6-1 18:17 , Processed in 0.118827 second(s), 37 queries , Gzip On.

返回顶部