第14课:Redis虚拟内存

redis在使用一段时间之后,随着用户的增长,突然发现内存不够用了,肿么办?

这个时候一般有两个方案,一个是把key设置过期时间,这样做的好处是显而易见的,可以释放不常用的内存,并且key过期之后,再次生成会重新取数据源,等于是自动更新了数据,即使内存数据有误,也会在下次更新的时候恢复

还有一种方案是开启虚拟内存。为什么会有这种需求?因为即使你设置过期时间,也无法预估到底需要多大的内存,而虚拟内存开启之后,会自动的释放不经常使用的内存,很好很贴心
同时设置过期时间还有一个弊端,就是会导致缓存命中率下降

虚拟内存实现:
'把不经常用的key的值交换到磁盘,自动释放内存空间,再次用到的时候会自动从磁盘加载到内存'

虚拟内存配置:
1.在配置文件中添加以下配置项,以使当前Redis服务器在启动时打开虚存功能。
vm-enabled yes

2.在配置文件中设定Redis最大可用的虚存字节数。如果内存中的数据大于该值,则有部分对象被换出到磁盘中,其中被换出对象所占用内存将被释放,直到已用内存小于该值时才停止换出。
vm-max-memory (bytes)
Redis的交换规则是尽量考虑"最老"的数据,即最长时间没有使用的数据将被换出。如果两个对象的age相同,那么Value较大的数据将先被换出。需要注意的是,Redis不会将Keys交换到磁盘,因此如果仅仅keys的数据就已经填满了整个虚存,那么这种数据模型将不适合使用虚存机制,或者是将该值设置的更大,以容纳整个Keys的数据。在实际的应用,如果考虑使用Redis虚拟内存,我们应尽可能的分配更多的内存交给Redis使用,以避免频繁的换入换出。

3.在配置文件中设定页的数量及每一页所占用的字节数。为了将内存中的数据传送到磁盘上,我们需要使用交换文件。这些文件与数据持久性无关,Redis会在退出前会将它们全部删除。由于对交换文件的访问方式大多为随机访问,因此建议将交换文件存储在固态磁盘上,这样可以大大提高系统的运行效率。
vm-pages 134217728
vm-page-size 32    
在上面的配置中,Redis将交换文件划分为vm-pages个页,其中每个页所占用的字节为vm-page-size,那么Redis最终可用的交换文件大小为:vm-pages * vm-page-size。由于一个value可以存放在一个或多个页上,但是一个页不能持有多个value,鉴于此,我们在设置vm-page-size时需要充分考虑Redis的该特征。

4.在Redis的配置文件中有一个非常重要的配置参数,即:
vm-max-threads 4
该参数表示Redis在对交换文件执行IO操作时所应用的最大线程数量

打赏  如对你有帮助,请我喝杯咖啡吧!