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 内存满了怎么办?相关推荐

  1. 怎么查询redis缓存的数据_阿里开发十年写出这份「Redis简明教程」+「Redis实战」请你查收...

    Redis是啥?用Redis官方的话来说就是: Redis is an open source (BSD licensed), in-memory data structure store, used ...

  2. 深入学习Redis(1):Redis内存模型

    前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...

  3. java redis 面试题_Java开发人员怎么面试 常见Redis面试题有哪些

    Java开发人员怎么面试?常见Redis面试题有哪些?Redis是目前各大企业都在使用的人们技术,也是企业选拔人才时考核的一个难题.有很多同学只是简单了解Redis的应用,但对于为什么要用Redis以 ...

  4. 深入学习 Redis(1):Redis 内存模型

    前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...

  5. Java开发 - Redis初体验

    前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库.两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的 ...

  6. 如何使用Redis Data Reveal(rdr)查看redis中每个key占用的内存大小

    如何使用Redis Data Reveal(rdr)查看redis中每个key占用的内存大小 一.为什么要查看redis中每个key的占用 二.怎么查看redis中每个key的占用 一.为什么要查看r ...

  7. 败家玩意儿!Redis 竟然浪费了这么多内存!

    作者|莱乌 作为内存数据库,内存空间大小对于 Redis 来说是至关重要的.内存越多,意味着存储的数据也会越多.但是不知道你有没有遇到过这样的情况,明明空间很大,但是内存的使用却不是很理想. 为什么会 ...

  8. redis php数据插入失败,redis插入数据,恢复数据测试(禁止淘汰策略下恢复大于redis内存限制数据情况)...

    环境准备: redis php的redis扩展 redis version=4.0.8 php version: php version.png php redis extension: php re ...

  9. Redis 过期键删除策略、内存淘汰机制

    文章目录 过期键删除策略 定时删除 惰性删除 定期删除 Redis的选择 内存淘汰机制 redis中缓存的数据是有过期时间的,当缓存数据失效时,redis会删除过期数据以节省内存,那redis是怎样怎 ...

最新文章

  1. Android 性能优化
  2. Glide使用OkHttp加载图片
  3. php高版本安装ecshop错误解决方法
  4. 精通python要多久-精通python 或者R语言大约需要多长时间?怎样算精通?
  5. 第11章 linux文档的压缩与打包
  6. CMM与CMMI的关系;软件全面质量管理的思想体系
  7. Fiddler抓包工具详解(四)(断点设置+弱网测试)
  8. record not found or changed by another user 解决方法
  9. 筒仓计算表格_身份反模式:联邦筒仓和意大利面条身份
  10. 电脑如何设置不休眠_电脑休眠了却没法唤醒?设置一下就好!
  11. C++实现txt文件读到另一个txt文件,并替代其中默写特定字符
  12. QT--3.创建一个简单的图形界面
  13. 手机远程计算机桌面,远程桌面预览Windows10,您可以远程通过手机控制电脑
  14. 第一章 教育基础(05 小学教育研究)
  15. 名帖77 刘弘珪 楷书《金刚般若波罗蜜经》
  16. 利用python做词频统计
  17. Clearing the Skies: A deep network architecture for single-image rain removal解读
  18. neo4j windows 3.5详细安装教程(附百度云链接)
  19. 【C3】cpu_wtd_sysfs
  20. 一个合格程序员应该读过的书

热门文章

  1. Python中通过csv的writerow输出的内容有多余的空行
  2. yii mysql 2002_YII 错误 SQLSTATE[HY000] [2002] No such file or directory
  3. html标签anchor,浏览器端-W3School-HTML:HTML DOM Anchor 对象
  4. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 2.)(python/c/c++版)(笔记)
  5. python PyQt5中文教程☞【第五节】PyQt5事件(Event)和信号(信号槽 Signals slots)
  6. try catch finally 执行顺序问题
  7. Linux环境下安装OpenOffice 4.1.8
  8. CentOS7下Hive集群搭建
  9. Security 登录认证流程详细分析 源码与图相结合
  10. html中怎样引入外部字体文件路径,CSS引入外部字体