Redis学习笔记V-VM 虚拟内存 http://blog.csdn.net/zhangjhtt/article/details/6440712

来源:互联网 发布:淘宝装修工具 编辑:程序博客网 时间:2024/06/06 09:26

Redis学习笔记V-VM 虚拟内存

分类: 架构 开源分析 2165人阅读 评论(0) 收藏 举报
redishashmap磁盘存储系统sessionstring

 

翻译自:http://redis.io/topics/virtual-memory

 

Redis的VM(Virtual Memory 虚拟内存)>=2.0版本之后的特性。

 

I. VM - 说来简单

 

Redis的Key-Value存储结构(HashMap)意味着Redis维护了一堆key,每一个key关联到一个value。通常情况下Redis在内存中维护着整个HashMap:包括key和value。但有时候这不是个好的方案:当然,所有的key是必须要在内存中的(提供全局速查),而这些key的value就不同了,当很少访问这些key的value时,把它们写入磁盘并擦掉其内存会更好。

 

这么说吧:如果你有一个持有1Million key的Redis,而只有10%的key是常用的,这时Redis会将这10%的key关联的value保留,而其他的value被擦到磁盘。当你访问的被擦的数据key时,这些key关联的value又会被加载到内存。

 

VM特性是可配置的,你可以禁用VM特性。

 

II. VM特性 - 选择启用还是禁用?

 

何时启用VM特性是值得商榷的,Redis是一个依赖磁盘的内存数据存储系统(传统DB是依赖磁盘的非内存数据存储系统,当然如Mysql的Session engine表也是常驻内存的,但是Session engine表不能实现持久化,而Redis透明的实现了内存数据到磁盘的持久化)。似乎是这样的:只要有足够大的RAM我们就可以用Redis了!但是不能一言以蔽之,应用上会有一些特殊的情形不适合:

 

i.  数据的使用是很偏颇的。好比二八定律,80%的访问都是访问20%的数据,而其余80%的数据仍占有其必需的内存。

ii. 一次性将所有value加载到内存是很耗时的。

iii. 类似没有足够的内存保持所有的数据——不考虑访问的偏颇性,如果value体积很大,那么每次访检索到key(HashMap访问速度是很快的),都要读硬盘得到value数据,这样虽然检索key很快,但是要得到对应的value就慢下来了。所以Redis折忠了:内存中保留了所有的key,同时冷数据又会被涮出内存。

 

铭记一点:Redis不可能将key刷出内存,所以,如果你内存不大,而key超多,同时每个key的value又不大,那VM特性是不适用的。一般情况下如果value是大string,list,set,sorted set,hashtable,那是应该选择VM特性的。

 

通常,可以将多个小value的key合并为一个value的key,这个key是一个集合类型。

 

III. VM特性配置

 

配置redis.conf:

vm-enable yes

vm-max-memory # setting specifies how much memory Redis is free to use before starting swapping values on disk.

 

未完···

0 0
原创粉丝点击