美文网首页Redis
Redis4.0新特性--概述

Redis4.0新特性--概述

作者: 吞吞_c599 | 来源:发表于2020-05-09 11:00 被阅读0次

    Redis4.0版本增加了很多新的特性,如:

    1. Redis Memeory Command:详细分析内存使用情况、内存使用诊断、内存碎片回收;
    2. PSYNC2:解决failover和从实例重启不能部分同步;
    3. LazyFree: 再也不用怕big key的删除引起集群故障切换;
    4. LFU: 支持近似的LFU内存淘汰算法;
    5. Active Memory Defragmentation:内存碎片回收效果很好(实验阶段);
    6. Modules: Redis成为更多的可能(觉得像mongo/mysql引入engine的阶段);

    一、Redis Memeory Command

    redis-4.0之前只能通过info memory来了解redis内部有限的内存信息,4.0提供了memory命令,帮助用户全面了解redis的内存状态。

    通过memory helpin 命令查看memory命令帮助文档:

    1) "MEMORY DOCTOR - Outputs memory problems report"
    2) "MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"
    3) "MEMORY STATS - Show memory usage details"
    4) "MEMORY PURGE - Ask the allocator to release memory"
    5) "MEMORY MALLOC-STATS - Show allocator internal stats"</pre>
    

    二、PSYNC2

    部分重新同步(partial resync)增加版本;主要解决Redis运维管理过程中,从实例重启和主实例故障切换等场景带来的全量重新同步(full resync)问题。

    三、LazyFree

    Lazyfree机制可以避免del、flushdb/flushall、rename等命令引起的redis-server阻塞,提高服务稳定性。
    lazy free应用于被动删除中,目前有4种场景,每种场景对应一个配置参数; 默认都是关闭,在生产环境需结合实际情况开启:

    # 针对redis内存使用达到maxmemory,并设置有淘汰策略时,在被动淘汰键时,是否采用lazy free机制
    # 不建议开启,可能使淘汰ley的内存释放不及时导致redis内存超用
    lazyfree-lazy-eviction no
    
    # 针对设置TTL且过期的key,被redis清理时是否采用lazy free机制
    # 建议开启
    lazyfree-lazy-expire yes
    
    # 针对带有隐式del的操作命令(例如rename命令),是否采用lazy free机制
    # 建议开启
    lazyfree-lazy-server-del yes
    
    # 针对slave全量数据同步、加载master的RDB文件之前的flushall操作来清理自己的数据场景,是否采用lazy free机制
    # 若内存变动不大,建议可开启
    slave-lazy-flush no
    
    1 、del命令

    在redis-4.0之前,redis执行del命令,会在释放掉key的所有内存以后才会返回OK,这在key比较大的时候(比如说一个hash里头有1000W条数据),其他连接可能要等待很久。
    为了兼容已有的del语义,redis-4.0引入unlink命令,效果以及用法和del完全一样,但内存释放动作放到后台线程中执行。

    UNLINK key [key ...]
    
    2、flushdb/flushall命令

    flushdb/flushall在redis-4.0中新引入了选项,可以指定是否使用Lazyfree的方式来清空整个内存。

    FLUSHALL [ASYNC] 
    FLUSHDB [ASYNC]
    
    3、rename命令

    针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作。
    例如:执行 rename oldkey newkey 时,如果newkey已经存在,redis会先删除,这也会引发上面提到的删除大key问题。对此可以设置lazyfree-lazy-server-del参数:
    如果这些目标键是一个big key,那就会引入阻塞删除的性能问题。 此参数设置就

    <pre style="margin: 10px 0px 0px;">lazyfree-lazy-server-del yes/no</pre>

    四、LFU

    redis-4.0新增了 allkey-lfu 和 volatile-lfu 两种数据逐出策略,同时还可以通过object命令来获取某个key的访问频度。

    object freq user_key
    

    基于LFU机制,用户可以使用 scan + object freq 来发现热点key,当然redis也一起发布了更好用的:

    redis-cli --hotkeys
    

    五、持久化

    redis有两种持久化的方式——RDB和AOF其中RDB是一份内存快照AOF则为可回放的命令日志他们两个各有特点也相互独立。4.0开始允许使用RDB-AOF混合持久化的方式结合了两者的优点通过aof-use-rdb-preamble配置项可以打开混合开关。

    相关文章

      网友评论

        本文标题:Redis4.0新特性--概述

        本文链接:https://www.haomeiwen.com/subject/ikvhnhtx.html