设为首页 加入收藏

TOP

Redis(三)
2017-10-16 18:18:51 】 浏览:4826
Tags:Redis
,对于网站来说确实总是只有少量用户经常活跃。当少量数据被经常访问时,使用vm不但能提高单台redis server数据库的容量,而且也                     不会对性能造成太多影响。                       

                 redis没有使用os提供的虚拟内存机制而是自己在用户态实现了自己的虚拟内存机制,作者在自己的blog专门解释了其中原因。

                 http://antirez.com/post/redis-virtual-memory-story.html
                主要的理由有两点:

                          1. os 的虚拟内存是已4k页面为最小单位进行交换的。而redis的大多数对象都远小于4k,所以一个os页面上可能有多个redis对象。另外redis的                                 集合对象类型如list,set可能存在与多个os页面上。最终可能造成只有10%key被经常访问,但是所有os页面都会被os认为是活跃的,这样只                                   有内存真正耗尽时os才会交换页面;
                          2.相比于os的交换方式。redis可以将被交换到磁盘的对象进行压缩,保存到磁盘的对象可以去除指针和对象元数据信息。一般压缩后的对象会比                                内存中的对象小10倍。这样redis的vm会比os vm能少做很多io操作;
                下面是vm相关配置:                               

                             slaveof 192.168.1.1 6379  #指定master的ip和端口

                             vm-enabled yes          #开启vm功能
                             vm-swap-file /tmp/redis.swap   #交换出来的value保存的文件路径/tmp/redis.swap
                             vm-max-memory 1000000  #redis使用的最大内存上限,超过上限后redis开始交换value到磁盘文件中
                             vm-page-size 32        #每个页面的大小32个字节
                             vm-pages 134217728     #最多使用在文件中使用多少页面,交换文件的大小 = vm-page-size * vm-pages
                             vm-max-threads 4       #用于执行value对象换入换出的工作线程数量,0表示不使用工作线程(后面介绍)                         

                redis的vm在设计上为了保证key的查找速度,只会将value交换到swap文件中。所以如果是内存问题是由于太多value很小的key造成的,那么vm并不           能解决。和os一样redis也是按页面来交换对象的。redis规定同一个页面只能保存一个对象。但是一个对象可以保存在多个页面中。在redis使用的内存没超        过vm-max-memory之前是不会交换任何value的。当超过最大内存限制后,redis会选择较老的对象。如果两个对象一样老会优先交换比较大的对象,精确的        公式swappability = age

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇在ubuntu16.04中一键创建LAMP环境.. 下一篇Ubuntu linux系统下 su:出现: au..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目