lru(least recently used)最近最少使用算法是众多置换算法中的一种。
redis中有一个maxmemory概念,主要是为了将使用的内存限定在一个固定的大小。redis用到的lru 算法,是一种近似的lru算法。
127.0.0.1:6379> config get maxmemory 1) "maxmemory" 2) "0" 127.0.0.1:6379> config set maxmemory 100mb ok 127.0.0.1:6379> config get maxmemory 1) "maxmemory" 2) "104857600"
注意,在64bit系统下,maxmemory设置为0表示不限制redis内存使用,在32bit系统下,maxmemory隐式不能超过3gb。 当redis内存使用达到指定的限制时,就需要选择一个置换的策略。
当redis内存使用达到maxmemory时,需要选择设置好的maxmemory-policy进行对老数据的置换。
下面是可以选择的置换策略:
volatile-lru和volatile-random经常在一个redis实例既做cache又做持久化的情况下用到,然而,更好的选择使用两个redis实例来解决这个问题。设置是失效时间expire会占用一些内存,而采用allkeys-lru就没有必要设置失效时间,进而更有效的利用内存。
理解置换策略的执行方式是非常重要的,比如:
我们持续的写数据会导致内存达到或超出上限maxmemory,但是置换策略会将内存使用降低到上限以下。
如果一次需要使用很多的内存(比如一次写入一个很大的set),那么,redis的内存使用可能超出最大内存限制一段时间。
设置转换策略
127.0.0.1:6379> config get maxmemory-policy 1) "maxmemory" 2) "0" 127.0.0.1:6379> config set maxmemory-policy allkeys-lru ok 127.0.0.1:6379> config get maxmemory-policy 1) "maxmemory-policy" 2) "allkeys-lru"
如对本文有疑问, 点击进行留言回复!!
express+mongoose实现对mongodb增删改查操作详解
修复 Mac brew 安装 mongodb 报 Error: No available formula with the name ‘mongodb’ 问题详解
网友评论