• 设置Redis的LRU策略


    概念

    LRU(Least Recently Used)最近最少使用算法是众多置换算法中的一种。

    maxmemory

    Redis中有一个maxmemory概念,主要是为了将使用的内存限定在一个固定的大小。Redis用到的LRU 算法,是一种近似的LRU算法。

    设置maxmemory

    127.0.0.1:6379> CONFIG GET maxmemory
    1) "maxmemory"
    2) "0"
    127.0.0.1:6379> CONFIG SET maxmemory 100MB
    OK
    127.0.0.1:6379> CONFIG GET maxmemory
    1) "maxmemory"
    2) "104857600"
    

    注意,在64bit系统下,maxmemory设置为0表示不限制Redis内存使用,在32bit系统下,maxmemory隐式不能超过3GB。 当Redis内存使用达到指定的限制时,就需要选择一个置换的策略。

    置换策略

    当Redis内存使用达到maxmemory时,需要选择设置好的maxmemory-policy进行对老数据的置换。
    下面是可以选择的置换策略:

    1. noeviction: 不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error
    2. allkeys-lru: 优先删除掉最近最不经常使用的key,用以保存新数据
    3. volatile-lru: 只从设置失效(expire set)的key中选择最近最不经常使用的key进行删除,用以保存新数据
    4. allkeys-random: 随机从all-keys中选择一些key进行删除,用以保存新数据
    5. volatile-random: 只从设置失效(expire set)的key中,选择一些key进行删除,用以保存新数据
    6. volatile-ttl: 只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除,用以保存新数据

    volatile-lru和volatile-random经常在一个Redis实例既做cache又做持久化的情况下用到,然而,更好的选择使用两个Redis实例来解决这个问题。设置是失效时间expire会占用一些内存,而采用allkeys-lru就没有必要设置失效时间,进而更有效的利用内存。

    3 置换策略是如何工作的

    理解置换策略的执行方式是非常重要的,比如:

    1. 客户端执行一条新命令,导致数据库需要增加数据(比如set key value)
    2. Redis会检查内存使用,如果内存使用超过maxmemory,就会按照置换策略删除一些key
    3. 新的命令执行成功

    我们持续的写数据会导致内存达到或超出上限maxmemory,但是置换策略会将内存使用降低到上限以下。

    如果一次需要使用很多的内存(比如一次写入一个很大的set),那么,Redis的内存使用可能超出最大内存限制一段时间。

    设置转换策略

    127.0.0.1:6379> CONFIG GET maxmemory-policy
    1) "maxmemory"
    2) "0"
    127.0.0.1:6379> CONFIG SET maxmemory-policy allkeys-lru
    OK
    127.0.0.1:6379> CONFIG GET maxmemory-policy
    1) "maxmemory-policy"
    2) "allkeys-lru"
    
  • 相关阅读:
    java中的访问控制符
    DDD CQRS和Event Sourcing的案例:足球比赛
    你用过Spring中哪些功能?
    基于角色的权限访问控制初步
    mybatis深入学习
    GNU make学习笔记
    XmlFactoryBean和DefaultListableBeanFactory学习
    重新组织函数
    【JRebel 作者出品--译文】Java class 热更新:关于对象,类,类加载器
    不吹不黑,关于 Java 类加载器的这一点,市面上没有任何一本图书讲到
  • 原文地址:https://www.cnblogs.com/lori/p/11423774.html
Copyright © 2020-2023  润新知