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. My SQL的基本操作(总结)

    My SQL的基本操作(总结) 因为本人目前是学生,前一段时间因为一些原因没有按时更新博客,今天我来总结一下My SQL的基本操作. 一.下载与安装 windows版本MySQL下载地址: http: ...

  2. 理解 ASP.NET Core: 处理管道

    理解 ASP.NET Core 处理管道 在 ASP.NET Core 的管道处理部分,实现思想已经不是传统的面向对象模式,而是切换到了函数式编程模式.这导致代码的逻辑大大简化,但是,对于熟悉面向对象 ...

  3. python3 多线程批量验证POC模板

    #coding:utf-8 import threading,Queue,sys,os class RedisUN(threading.Thread): def __init__(self,queue ...

  4. [原题复现]强网杯 2019 WEB高明的黑客

    简介  原题复现:  考察知识点:python代码编写能力...  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简 ...

  5. webug第七关:越权

    第七关:越权 观察url 将name换成admin 更改了admin的密码

  6. (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016

    [buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...

  7. Vegas教程:教你制作热门人物消失特效

    在许多电影中,我们经常会看到一些人物逐渐消失的情景,这种情景一般都是通过后期技术处理的结果,现实生活中根本不可能出现,那么这种特效是如何制作处理的呢?下面小编就来教大家如何用Vegas    Pro ...

  8. vulnhub: DC 9

    信息收集: root@kali:/opt/test# nmap -A -v 192.168.76.137 Starting Nmap 7.80 ( https://nmap.org ) at 2020 ...

  9. 分析一个免杀webshell发现的php特性

    文章首发于t00ls,嫌文章太啰嗦的可以直接看结论 起源 之前看到别人分享的一个免杀webshell: <?php @$GLOBALS{next} = $GLOBALS[$GLOBALS[fun ...

  10. 浅谈AsyncLocal,我们应该知道的那些事儿

    前言 最近查看有关框架源码,发现AsyncLocal这玩意水还挺深,于是花了一点功夫去研究,同时对比ThreadLocal说明二者区别以及在何时场景下使用AsyncLocal或ThreadLocal. ...