Redis实战(13)虚拟内存

  • 时间:
  • 浏览:0

首先说明下redis 的虚拟内存与操作系统的虚拟内存都有一码事,随后 思路和目的都有相同

的。好多好多 暂时把不总是访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于某些

须要访问的数据。尤其是对于redis 完后 的内存数据库,内存总是缺乏用的。除了还还可以 将数

据分割到多个redis server 外。另外的都都还还可以 提高数据库容量的办法好多好多 使用虚拟内存把某些

不总是访问的数据交换的磁盘上。机会人们的存储的数据总是有少次要数据被总是访问,大

次要数据很少被访问,对于网站来说随便说说总是不到一定量用户总是活跃。当一定量数据被总是访

问时,使用虚拟内存不但能提高单台redis server 数据库的容量,随后 好多好多 会对性能造成太

多影响。

redis 不到 使用操作系统提供的虚拟内存机制好多好多 我本人在实现了我本人的虚拟内存机制,主要

的理由有两点:

1、操作系统的虚拟内存是已4k 页面为最小单位进行交换的。而redis 的大多数对象都远小

于4k,好多好多 有一一个多多多 操作系统页面上机会有多个redis 对象。另外redis 的集合对象类型如list,set

机会位于与多个操作系统页面上。最终机会造成不到10%key 被总是访问,随后 所有操作系

统页面一定会被操作系统认为是活跃的,完后 不到内存真正耗尽时操作系统才会交换页面。

2、相比于操作系统的交换办法,redis 还还可以 将被交换到磁盘的对象进行压缩,保存到磁盘的对

象还还可以 去除指针和对象元数据信息,一般压缩后的对象会比内存中的对象小10 倍,完后 redis

的虚拟内存会比操作系统虚拟内存能少做好多好多 有io 操作。

本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1340672,如需转载请自行联系原作者

5

6

vm-max-memory 50000000 

7

2

1

vm-swap-file /tmp/redis.swap 

redis 的虚拟内位于设计上为了保证key 的查找速率 ,只会将value 交换到swap 文件中。所

以机会是内存某些的难题是机会太多value 很小的key 造成的,不到 虚拟内存从不到出理 ,和操作

系统一样redis 也是按页面来交换对象的。redis 规定同一一个多多多 页面不到保存一一个多多多 对象。随后 一

个对象还还可以 保位于多个页面中。在redis 使用的内存没超过vm-max-memory 完后 是不用交换

任何value 的。当超过最大内存限制后,redis 会选者 较过期的对象。机会一个多多多 对象一样过期

会优先交换比较大的对象,精确的公式swappability = age*log(size_in_memory)。对于

vm-page-size 的设置应该根据我本人的应用将页面的大小设置为还还可以 容纳大多数对象的大小,

太多了会浪费磁盘空间,太小了会造成交换文件出现碎片。对于交换文件中的每个页面,redis

会在内存中对应一一个多多多 1bit 值来记录页面的空闲具体情况。好多好多 有像里边配置中页面数量(vm-pages

134217728 )会占用16M 内存用来记录页面空闲具体情况。vm-max-threads 表示用做交换任务的

线程池池 数量。机会大于0 推荐设为服务器的cpu 内核的数量,机会是0 则交换过程在主线程池池 进行。

vm-enabled yes 

vm-pages 134217728 

vm-page-size 32 

4

vm-max-threads 4 

3