使用教程(十一):虚拟内存的介绍
1。简介:最喜欢的NoSQL数据库,redis也遵循键/值数据存储模型,在某些情况下,Redis会保存键/值在内存效率提高数据查询和数据修改。然而,这种做法并不总是一个好的选择,鉴于此,我们可以进一步优化它,即尽可能只保留内存中的密钥数据,从而保证数据检索的效率,而在很少使用时,可以将值数据切换到磁盘。
在实际应用中,只有约10%的按键是比较常见的关键,所以redis可以通过虚拟内存,将不常用的键和值的休息换出到磁盘,而一旦这些出键或值被读取,Redis会再次回到主存储器。
两。应用场景:
对于大多数数据库,最理想的运行方式是将所有数据加载到内存中,随后的查询操作完全可以基于内存数据完成。然而,实际上,这种情况并不常见,更多的情况是只有部分数据可以加载到内存中。
在Redis,有一个非常重要的概念,即键不会被交换一般,所以如果你的数据库中有大量的按键,每个键是非常小的值相关,这种情况下不使用虚拟内存非常适合。如果相反,只有少量的键包含在数据库中,并与每个键所关联的值是非常大的。这个场景更适合虚拟内存的使用。
在实际应用中,为了使虚拟内存发挥更有效的作用,帮助我们提高系统的运行效率,我们可以结合键与许多较小的值为键与一个小数量的更大的价值。最重要的方法是改变原来的键/值模式基于散列的模式,这使得大量的原始密钥是在哈希属性。
三。配置:
1)。添加以下配置配置文件以使当前的redis服务器启动时打开虚拟内存功能。
VM启用是
2)。设置虚拟字节可在配置文件中使用的最大数量。如果内存中的数据大于这个值,一些对象转移到磁盘,和改变的对象占用的内存将直到内存小于价值释放。
复制代码代码如下所示:
最大内存(字节)
Redis的交换规则是考虑最古老的数据,即不使用时间最长的数据将被替换。如果两个对象的年龄是相同的,那么数值较大的数据将取代第一。应该指出的是,使用不交换键盘,所以如果只有钥匙数据充斥着整个虚拟内存,这个数据模型不适合于使用虚拟内存机制,或设定值大以容纳整个密钥数据。在实际应用中,如果我们考虑使用虚拟内存的使用,我们应该分配更多的内存分配尽可能避免进出频繁的交换。
3)。在配置文件中设置大量的网页和网页的字节数。为了把数据存储到磁盘,我们需要使用交换文件。这些文件无关的数据的持久性,和Redis会删除所有之前他们退出。因为大多数的访问交换文件随机存取的方法,建议在固态磁盘存储交换文件,从而大大提高了系统的运行效率。
复制代码代码如下所示:
VM 134217728页
虚拟机页面大小32
在上面的配置,Redis将交换文件到虚拟机的页面的页面,其中每个页面占用的字节VM的页大小,那么最终可用的文件大小的redis是VM页* vm-page-size.because值可以被存储在一个或多个页面,但页面不能保存多个值。鉴于此,我们需要充分考虑Redis的特性在设置虚拟机的页面大小。
4)。在Redis的配置文件的一个非常重要的配置参数,即:
复制代码代码如下所示:
虚拟机最大线程4
这个参数表示使用适用于交换文件的IO操作的最大线程数。一般来说,我们建议的值等于主机的CPU内核。如果该值设为0,Redis将执行此操作在一个同步的方式与IO交换文件交互时。
Redis,如果操作交换文件是在同步模式中,当客户端访问文件中的数据交换,然后尝试访问其他客户如果在文件交换数据,客户端的请求将被暂停,直到结束之前的操作。特别是,当大数据读取值在相对缓慢或繁忙的磁盘,影响这堵更突然。然而,同步操作是没用的。事实上,从全局执行效率的角度来看,同步优于异步模式。毕竟,同步节省了线程交换、线程间同步和线程拉取的额外开销,尤其是当大多数常用数据可以直接从主存中读取时,同步性能会更好。
如果相反,你的系统有很多不正常的操作,那么你的系统有很多核心,所以你不想在访问交换文件之前先阻止客户机,如果是这样的话,我认为异步系统可能更适合你。
至于选择哪种配置,最好的答案来自于不断的实验和调优。