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. Environment Cubemap

    要创建一个Cubemap(将您的环境捕获到一个Cubemap中),您需要去Unity Documentation复制RenderCubemapWizard.cs脚本! 然后在"Project ...

  2. wordpress 博客环境安装

    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. 1.数据库环境 ...

  3. 死磕以太坊源码分析之rlpx协议

    死磕以太坊源码分析之rlpx协议 本文主要参考自eth官方文档:rlpx协议 符号 X || Y:表示X和Y的串联 X ^ Y: X和Y按位异或 X[:N]:X的前N个字节 [X, Y, Z, ... ...

  4. Network_01

    (从实践中学习TCP/IP协议读书笔记) 准备工作: 安装Kali Linux系统: 在VMWare中安装,选Debian 8.x 64bit,ISO镜像地址,在下载完镜像后,在VMWare中把镜像挂 ...

  5. 带你体验Folx的智能化下载功能

    BT下载器,也就是种子下载器,其优点是下载的人越多,下载的速度就越快,可以更快速地下载热门资源.这是因为,每个下载种子的用户,在下载的同时,也会上传资源,从而加速其他用户的下载速度. Folx软件,作 ...

  6. 记录一下Comparator的用法

    Collections.sort(res, new Comparator<ArrayList<Integer>>() {             @Override       ...

  7. E - Knapsack 2 题解(超大01背包)

    题目链接 题目大意 给你一n(n<=100)个物品,物品价值最大为1e3,物品体积最多为1e9,背包最大为1e9 题目思路 如果按照平常的背包来算那么时间复杂度直接O(1e11) 这个你观察就发 ...

  8. SpringBoot 整合邮件oh-my-email 实现发送邮件功能

    导读 最近手头上要负责整个Message Gateway服务的搭建,涉及到:微信推送(点我直达).短信.邮件等等,到github上发现有个微型的开源邮件框架,整理下来,以备项目中使用到,到时候应该会使 ...

  9. VUE中,@click后边( ) 有无括号的区别

    在使用的时候,两种方式结果效果差不多是一样. @click="Login()" @click="Login"而唯一的区别就是,有括号的可以在括号里写传递的参数. ...

  10. guava中的SettableFuture分析

    当缓存中没有要找的数据时,则要从数据库中去查询,而当并发量比较大时可能会击穿数据库,所以guava cache对同一值的查询做了合并请求的处理.其中就用到了SettableFuture,类似一把锁,只 ...