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

转载 2015年11月17日 16:47:07

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

分类: 架构 开源分析 2165人阅读 评论(0) 收藏 举报

 

翻译自: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.

 

未完···

Android菜鸟的成长笔记(25)——可爱的小闹钟

摘要:这一篇主要使用系统为我们提供的一个服务AlarmManager来制作一个Android小闹钟,同时还涉及到了自定义主题、判断第一次启动应用、自定义动画、对话框、制作指导滑动页面等方面。最后形成一...
  • lxq_xsyu
  • lxq_xsyu
  • 2014年02月26日 13:26
  • 7757

ps切图(3)——简单工具操作(2)

八个常见的处理图片的工具
  • xiyoki
  • xiyoki
  • 2016年02月22日 18:48
  • 853

《高效精准》敏感字&词过滤

在网上看到的大部分采用DFA算法,我看了之后感觉做得有些复杂了,DFA实现思路如下: 1:DFA采用Map的hash机制,将敏感词单个拆分,以第1个字符为key,其他值依旧使用map相连,形成了大ma...
  • u012892431
  • u012892431
  • 2015年04月16日 17:00
  • 2950

深度学习系列教程 - 序言

兄弟姐妹们,如需转载请标明出处:http://blog.csdn.net/jiangjunshow 总目录 各位乡亲父老们!人工智能,马上就要爆发了。一旦爆发,将会如黄河泛滥一发不可收拾。在当今,...
  • jiangjunshow
  • jiangjunshow
  • 2017年08月17日 19:19
  • 3039

音视频的流程:录制、播放、编码解码、上传下载等

> 音视频的录制、播放、编码、上传、下载、观看等,视频编解码,音频编解码,线音频播放 音视频同步等 查看源码的工具:sourceinsight , 不了解JNI的一定要学习下,否则只能在JAVA层搞...
  • ShareUs
  • ShareUs
  • 2016年12月11日 14:37
  • 1170

python 的日志logging模块学习

1.简单的将日志打印到屏幕   import logging logging.debug('This is debug message') logging.in...
  • a87b01c14
  • a87b01c14
  • 2015年05月18日 17:31
  • 1066

图像傅里叶变换

转自:http://blog.csdn.net/u011630458/article/details/52503647?locationNum=7&fps=1 简介   本篇是对回顾图像傅里叶...
  • sinat_31337047
  • sinat_31337047
  • 2017年03月20日 17:34
  • 152

屏幕适配之尺寸的相关概论《一》

最近写了一个屏幕尺寸的教程,同时也弥补一下自己的基础。今天我们先来探讨一下项目尺寸的相关知识 屏幕及其屏幕的相关基本知识 android中dip、dp、px、sp和屏幕密度 屏幕尺寸很多人不知道屏幕尺...
  • androidstarjack
  • androidstarjack
  • 2017年12月28日 09:07
  • 55

将java程序导成.exe,或安装文件的方法

经过几天对java桌面程序的打包研究,终于成功实现了把java程序变成在任何机器上运行的exe文件,现把大神的文章转载如下,方面以后查看! 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户...
  • xiaaiwu
  • xiaaiwu
  • 2015年01月15日 16:02
  • 1220

win7 下ubuntu卸载和安装

一、首先是卸载: 我用的是easyBCD 卸载很简单 按照图步骤 参考:http://blog.csdn.net/risingwonderland/article/de...
  • huaiyiheyuan
  • huaiyiheyuan
  • 2017年01月24日 19:52
  • 128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Redis学习笔记V-VM 虚拟内存 http://blog.csdn.net/zhangjhtt/article/details/6440712
举报原因:
原因补充:

(最多只允许输入30个字)