redis占用内存大小我们知道redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用redis的时候可以配置redis能使用的最大的内存大小。
1、通过配置文件配置通过在redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小
//设置redis最大占用内存大小为100m maxmemory 100mb
redis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redis的配置文件的2、通过命令修改redis支持运行时通过命令动态修改内存大小
//设置redis最大占用内存大小为100m 127.0.0.1:6379> config set maxmemory 100mb //获取设置的redis能使用的最大内存大小 127.0.0.1:6379> config get maxmemory
如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3gb内存redis的内存淘汰既然可以设置redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还继续往redis里面添加数据不就没内存可用了吗?实际上redis定义了几种策略用来处理这种情况:noeviction(默认策略):对于写请求不再提供服务,直接返回错误(del请求和部分特殊请求除外)allkeys-lru:从所有key中使用lru算法进行淘汰volatile-lru:从设置了过期时间的key中使用lru算法进行淘汰allkeys-random:从所有key中随机淘汰数据volatile-random:从设置了过期时间的key中随机淘汰volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰
当使用 volatile-lru、 volatile-random、 volatile-ttl这三种策略时,如果没有key可以被淘汰,则和 noeviction一样返回错误如何获取及设置内存淘汰策略获取当前内存淘汰策略:
127.0.0.1:6379> config get maxmemory-policy
通过配置文件设置淘汰策略(修改redis.conf文件):
maxmemory-policy allkeys-lru
通过命令修改淘汰策略:
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
lru算法什么是lru?上面说到了redis可使用最大内存使用完了,是可以使用lru算法进行内存淘汰的,那么什么是lru算法呢?
lru(least recently used),即最近最少使用,是一种缓存置换算法。在使用内存作为缓存的时候,缓存的大小一般是固定的。当缓存被占满,这个时候继续往缓存里面添加数据,就需要淘汰一部分老的数据,释放内存空间用来存储新的数据。这个时候就可以使用lru算法了。其核心思想是:如果一个数据在最近一段时间没有被用到,那么将来被使用到的可能性也很小,所以就可以被淘汰掉。lru在redis中的实现近似lru算法redis使用的是近似lru算法,它跟常规的lru算法还不太一样。近似lru算法通过随机采样法淘汰数据,每次随机出5(默认)个key,从里面淘汰掉最近最少使用的key。
可以通过maxmemory-samples参数修改采样数量:例:maxmemory-samples 10 maxmenory-samples配置的越大,淘汰的结果越接近于严格的lru算法redis为了实现近似lru算法,给每个key增加了一个额外增加了一个24bit的字段,用来存储该key最后一次被访问的时间。
php开发环境搭建工具有哪些一、phpstudy,是一个新手入门最常用的开发环境。
二、wampserver,wampserver也同样的也是和phpstudy一样操作简单对小白比较友好。
三、xampp,xampp(apache+mysql+php+perl)是一个功能强大的建站集成软件包;
四、mamp,mamp分为两种mamp和mamp pro for mac。
五、宝塔面板,宝塔面板是一款服务器管理软件,支持windows和linux系统。
六、upupw,upupw是目前windows平台下最具特色的web服务器php套件。
以上就是php使用redis内存不足如何解决的详细内容。
