Redis

Redis4.0新特性--概述

2020-05-09  本文已影响0人  吞吞_c599

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配置项可以打开混合开关。

上一篇 下一篇

猜你喜欢

热点阅读