php使用redis内存不足,PHP开发:Redis 内存满了怎么办?
Redis占用内存大小
Redis的内存淘汰
LRU算法
LRU在Redis中的实现
LFU算法
问题
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大厂PDF面试文档,PHP进阶架构视频资料,PHP精彩好文免费获取可以关注公众号:PHP开源社区,或者访问:
2021金三银四大厂面试真题集锦,必看!
四年精华PHP技术文章整理合集——PHP框架篇
四年精华PHP技术文合集——微服务架构篇
四年精华PHP技术文合集——分布式架构篇
四年精华PHP技术文合集——高并发场景篇
四年精华PHP技术文章整理合集——数据库篇
php使用redis内存不足,PHP开发:Redis 内存满了怎么办?相关推荐
- 怎么查询redis缓存的数据_阿里开发十年写出这份「Redis简明教程」+「Redis实战」请你查收...
Redis是啥?用Redis官方的话来说就是: Redis is an open source (BSD licensed), in-memory data structure store, used ...
- 深入学习Redis(1):Redis内存模型
前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...
- java redis 面试题_Java开发人员怎么面试 常见Redis面试题有哪些
Java开发人员怎么面试?常见Redis面试题有哪些?Redis是目前各大企业都在使用的人们技术,也是企业选拔人才时考核的一个难题.有很多同学只是简单了解Redis的应用,但对于为什么要用Redis以 ...
- 深入学习 Redis(1):Redis 内存模型
前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...
- Java开发 - Redis初体验
前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库.两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的 ...
- 如何使用Redis Data Reveal(rdr)查看redis中每个key占用的内存大小
如何使用Redis Data Reveal(rdr)查看redis中每个key占用的内存大小 一.为什么要查看redis中每个key的占用 二.怎么查看redis中每个key的占用 一.为什么要查看r ...
- 败家玩意儿!Redis 竟然浪费了这么多内存!
作者|莱乌 作为内存数据库,内存空间大小对于 Redis 来说是至关重要的.内存越多,意味着存储的数据也会越多.但是不知道你有没有遇到过这样的情况,明明空间很大,但是内存的使用却不是很理想. 为什么会 ...
- redis php数据插入失败,redis插入数据,恢复数据测试(禁止淘汰策略下恢复大于redis内存限制数据情况)...
环境准备: redis php的redis扩展 redis version=4.0.8 php version: php version.png php redis extension: php re ...
- Redis 过期键删除策略、内存淘汰机制
文章目录 过期键删除策略 定时删除 惰性删除 定期删除 Redis的选择 内存淘汰机制 redis中缓存的数据是有过期时间的,当缓存数据失效时,redis会删除过期数据以节省内存,那redis是怎样怎 ...
最新文章
- Android 性能优化
- Glide使用OkHttp加载图片
- php高版本安装ecshop错误解决方法
- 精通python要多久-精通python 或者R语言大约需要多长时间?怎样算精通?
- 第11章 linux文档的压缩与打包
- CMM与CMMI的关系;软件全面质量管理的思想体系
- Fiddler抓包工具详解(四)(断点设置+弱网测试)
- record not found or changed by another user 解决方法
- 筒仓计算表格_身份反模式:联邦筒仓和意大利面条身份
- 电脑如何设置不休眠_电脑休眠了却没法唤醒?设置一下就好!
- C++实现txt文件读到另一个txt文件,并替代其中默写特定字符
- QT--3.创建一个简单的图形界面
- 手机远程计算机桌面,远程桌面预览Windows10,您可以远程通过手机控制电脑
- 第一章 教育基础(05 小学教育研究)
- 名帖77 刘弘珪 楷书《金刚般若波罗蜜经》
- 利用python做词频统计
- Clearing the Skies: A deep network architecture for single-image rain removal解读
- neo4j windows 3.5详细安装教程(附百度云链接)
- 【C3】cpu_wtd_sysfs
- 一个合格程序员应该读过的书
热门文章
- Python中通过csv的writerow输出的内容有多余的空行
- yii mysql 2002_YII 错误 SQLSTATE[HY000] [2002] No such file or directory
- html标签anchor,浏览器端-W3School-HTML:HTML DOM Anchor 对象
- 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 2.)(python/c/c++版)(笔记)
- python PyQt5中文教程☞【第五节】PyQt5事件(Event)和信号(信号槽 Signals slots)
- try catch finally 执行顺序问题
- Linux环境下安装OpenOffice 4.1.8
- CentOS7下Hive集群搭建
- Security 登录认证流程详细分析 源码与图相结合
- html中怎样引入外部字体文件路径,CSS引入外部字体