1. 查询Redis最大占用内存

# 查询最大占用内存
config get maxmemory
# 为0时在64操作系统中不限制内存,在32位操作系统中最大为3GB

2. Redis设置最大占用内存

  • 通过配置文件设置
# 设置最大占用内存大小为100MB
maxmemory 100MB
  • 通过命令设置
# 设置最大占用内存大小为100MB
config set maxmemory 100MB

3. 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可以被淘汰,则和默认策略一样返回错误。

4. 查询Redis内存淘汰策略

# 查询内存淘汰策略
config get maxmemory-policy

5. Redis设置内存淘汰策略

  • 通过配置文件设置
# 设置内存淘汰策略为:allkeys-lru
maxmemory-policy allkeys-lru
  • 通过命令设置
# 设置内存淘汰策略为:allkeys-lru
config set maxmemory-policy allkeys-lru

6. LRU算法

  LRU(Least Recently Used),即最近最少使用,是一种缓存置换算法。

  在使用内存作为缓存的时候,缓存的大小一般是固定的。当缓存被占满,这个时候继续添加数据,就需要淘汰一部分数据,释放内存空间存储新的数据。此时就可以使用LRU算法了,其核心思想是:如果一个数据在最近一段时间没有被用到,那么将来被使用到的可能性也很小,所以就可以被淘汰。

7. LRU算法在Redis中的实现

  Redis使用的是近似LRU算法。近似LRU算法通过随机采样法淘汰数据,每次随机出5(默认)个key,从里面淘汰掉最近最少使用的key。

  可以通过maxmemory-samples参数修改采样数量:修改配置文件中maxmemory-samples 10或通过命令config set maxmemory-samples 10。maxmenory-samples配置的数值越大,淘汰的结果越接近于严格的LRU算法。

  Redis为了实现近似LRU算法,给每个key额外增加了24字节,用来存储该key最后一次被访问的时间。

8. Redis3.0对近似LRU的优化

  Redis3.0对近似LRU算法进行了一些优化。新算法会维护一个候选池(大小为16),池中的数据根据访问时间进行排序,第一次随机选取的key都会放入池中,随后每次随机选取的key只有在访问时间小于池中最小的时间才会放入池中,直到候选池被放满。当放满后,如果有新的key需要放入,则将池中最后访问时间最大(最近被访问)的移除。

  当需要淘汰的时候,则直接从池中选取最近访问时间最小(最久未被访问)的key淘汰。

9. Redis4.0新增LFU算法

  LFU(Least Frequently Used),它的核心思想是:根据key的最近访问频率进行淘汰,很少被访问的优先被淘汰,访问多的则被留下来。

  LFU算法能更好的表示一个key被访问的热度。假如使用的是LRU算法,一个key很久没有被访问,但是刚刚偶尔被访问了一次,那么它就被认为是热点数据,不会被淘汰,而有些key将来很有可能被访问到但被淘汰了。如果使用LFU算法则不会出现这种情况,因为使用一次并不会使一个key成为热点数据。

10. LFU算法策略

  • volatile-lfu

      在设置了过期时间的key中使用LFU算法淘汰。
  • allkeys-lfu

      在所有的key中使用LFU算法淘汰数据。

    注意:LFU策略只能在Redis4.0及以上版本使用,版过低会报错。

Redis达到最大占用内存后的淘汰策略的更多相关文章

  1. Redis++:Redis 内存爆满 之 淘汰策略

    前言: 我们的redis使用的是内存空间来存储数据的,但是内存空间毕竟有限,随着我们存储数据的不断增长,当超过了我们的内存大小时,即在redis中设置的缓存大小(maxmeory 4GB),redis ...

  2. httpd2.4.6三种工作模式(如何配置),防止占用内存暴增的策略

    之前偷懒默认用yum安装了httpd.后来发现服务器内存暴增,一度达到75% 打开一看,好嘛后台休眠进程全是httpd. 重启之后再度访问发现内存还是稳步增长. [root@iz2ze3ayxs2yp ...

  3. 设置Redis最大占用内存

    https://blog.csdn.net/happyrabbit456/article/details/54945667 Redis需要设置最大占用内存吗?如果Redis内存使用超出了设置的最大值会 ...

  4. redis六种内存淘汰策略学习

    当客户端会发起需要更多内存的申请,Redis检查内存使用情况,如果实际使用内存已经超出maxmemory,Redis就会根据用户配置的淘汰策略选出无用的key; 当前Redis3.0版本支持的淘汰策略 ...

  5. Redis中的LRU淘汰策略分析

    Redis作为缓存使用时,一些场景下要考虑内存的空间消耗问题.Redis会删除过期键以释放空间,过期键的删除策略有两种: 惰性删除:每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除 ...

  6. Redis的内存淘汰策略

    Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限,所以我们在使用Redis的时候可以配置Redis能使用的最大的内存大小. 1.通过配置文件配置 ...

  7. Redis 内存满了怎么办? Redis的内存淘汰策略

    https://juejin.im/post/5d674ac2e51d4557ca7fdd70 Redis占用内存大小 我们知道Redis是基于内存的key-value数据库,因为系统的内存大小有限, ...

  8. Redis详解(十一)------ 过期删除策略和内存淘汰策略

    在介绍这篇文章之前,我们先来看如下几个问题: ①.如何设置Redis键的过期时间? ②.设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗? ③.如何设置R ...

  9. Redis的内存回收原理,及内存过期淘汰策略详解

    Redis 内存回收机制Redis 的内存回收主要围绕以下两个方面: 1.Redis 过期策略:删除过期时间的 key 值 2.Redis 淘汰策略:内存使用到达 maxmemory 上限时触发内存淘 ...

随机推荐

  1. Spring Cloud配置中心之Consul

    Consul不仅可以作为Spring Cloud中服务的注册中心,也可以作为其配置中心,这样一个系统就可以实现服务发现和统一配置,减少系统维护的麻烦,其中在使用Consul作为配置中心使用的过程中可以 ...

  2. 【开源】.net微服务开发引擎Anno开源啦

    1.Anno是什么? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项 ...

  3. python-基础入门-2

    这里介绍两个,相当于c中的scanf函数 第一个raw_input 1 age=raw_input("how old are you ") 2 print "you ar ...

  4. 关于Intege.valueOf()的使用

    原文链接:https://blog.csdn.net/weixin_37650458/article/details/85212730 1.Integer. valueOf()方法的作用     In ...

  5. win10一行代码搭建本地html项目

    最近玩了下web项目,需要部署到本地查看效果. 一:准备 1.安装python或者安装node.js 2.html项目文件 二:python搭建 1.进入html文件的路径 2.通过python命令部 ...

  6. 【操作系统】银行家算法实现(C语言)

    [操作系统]银行家算法实现(C语言) 注意:本人编码水平很菜.算是自己的一个总结.可能会有我还没有发现的bug.如果有人发现后可以指出,不胜感激. 1.银行家算法: 我们可以把操作系统看作是银行家,操 ...

  7. 一口气带你读懂80年IT发展史

    计算机的发展历史有多长?真正意义上的计算机诞生,距今也只有80多年的时间.80年,对于每一个人来说,是很长的时间,但对于整个历史来说,只是短短的一瞬间.这八十多年只是整段历史中的一粒尘埃罢了,但却对这 ...

  8. 使用Python过程出现的细节问题:TypeError: not enough arguments for format string

    今天使用字符串格式化时,遇到的一点小问题:调用这个方法解释器出错了:TypeError: not enough arguments for format string def ll(name,age) ...

  9. 40 张图带你搞懂 TCP 和 UDP

    前言 欢迎阅读「程序员cxuan」 的文章,从今往后,你就是我的读者了. 我的 github bestJavaer 已经收录此文章,目录在 https://github.com/crisxuan/be ...

  10. Cys_Control(三) MTextBox

    一.查看TextBox原样式 通过Blend查看TextBox原有样式 <Window.Resources> <SolidColorBrush x:Key="TextBox ...