redis-4.0新功能介绍

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 阿里云redis-4.0的新特性介绍

阿里云redis4.0引擎是以社区4.0为基础,合入大量阿里云开发的特性以及bugfix后全新推出的售卖版本。除了拥有redis-2.8引擎所具备的所有优势之外,还带来了很多新功能。

Lazyfree

redis-4.0带来的Lazyfree机制可以避免del,flushdb/flushall,rename等命令引起的redis-server阻塞,提高服务稳定性。

unlink

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

UNLINK key [key ...]

flushdb/flushall

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

FLUSHALL [ASYNC]
FLUSHDB [ASYNC]

rename

执行 rename oldkey newkey 时,如果newkey已经存在,redis会先删除,这也会引发上面提到的删除大key问题,如果想让redis在这种场景下也使用lazyfree的方式来删除,可以在控制台上打开如下配置:

lazyfree-lazy-server-del yes/no

其他场景

某些用户对数据设置过期时间,依赖redis的淘汰机制去删除已经过期的数据,这同样也存在上面提到的问题,淘汰某个大key会导致进程CPU出现抖动,redis-4.0提供了两个配置,可以让redis在淘汰或者逐出数据时也使用lazyfree的方式。

lazyfree-lazy-eviction yes/no
lazyfree-lazy-expire yes/no

新增命令

swapdb

swapdb命令会交换两个db的数据,swapdb执行之后用户连接无需再执行select,即可看到新的数据。

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set key value0
OK
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> set key value1
OK
127.0.0.1:6379[1]> swapdb 0 1
OK
127.0.0.1:6379[1]> get key
"value0"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get key
"value1"

zlexcount

zlexcount命令用于sorted set中,和zrangebylex类似,不同的是zrangebylex返回member,而zlexcount是返回符合条件的member个数。

memory

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

127.0.0.1:6379> memory help
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"
  • memory usage

usage子命令可以查看某个key在redis内部实际占用多少内存,这里有两点需要说明:

  1. 不光key, value需要占用内存,redis管理这些数据还需要一部分内存
  2. 对于hash, list, set, sorted set这些类型,结果是采样计算的,可以通过SAMPLES 来控制采样数量
  • memory stats
27.0.0.1:6379> memory stats
     1) "peak.allocated"    // redis从启动到现在,历史最多使用过多少内存
     2) (integer) 423995952
     3) "total.allocated"    //当前使用内存
     4) (integer) 11130320
     5) "startup.allocated"    //redis启动初始化以后占用内存
     6) (integer) 9942928
     7) "replication.backlog"    //主从复制断开重连时会用到,默认10MB
     8) (integer) 1048576
     9) "clients.slaves"    // 主从复制用到的内存
    10) (integer) 16858
    11) "clients.normal"    //普通用户客户端的读写缓冲区
    12) (integer) 49630
    13) "aof.buffer"    //aof持久化使用的缓存和aofrewrite时产生的缓存之和
    14) (integer) 3253
    15) "db.0"    //每个db的元数据所占用内存
    16) 1) "overhead.hashtable.main"
        2) (integer) 5808
        3) "overhead.hashtable.expires" //管理带过期时间的数据所额外消耗内存
        4) (integer) 104
    17) "overhead.total"    //上面提到的各项内存消耗之和
    18) (integer) 11063904
    19) "keys.count"    //当前存储的key的总量
    20) (integer) 94
    21) "keys.bytes-per-key"    //当前内存中平均每个key大小
    22) (integer) 12631
    23) "dataset.bytes"        //用户数据所占用内存(= 总内存 - redis元数据所占内存)
    24) (integer) 66416
    25) "dataset.percentage"    //100 * dataset.bytes / (total.allocated - startup.allocated)
    26) "5.5934348106384277"
    27) "peak.percentage"    // 100 * total.allocated / peak_allocated
    28) "2.6251003742218018"
    29) "fragmentation"    //内存碎片率
    30) "1.1039986610412598"
  • memory doctor

主要用于给一些诊断建议,提前发现潜在问题。

Peak memory: peak.allocated/total.allocated > 1.5,此时内存碎片率可能比较高
High fragmentation: fragmentation > 1.4,此时碎片率比较高
Big slave buffers: 每个slave缓冲区的平均内存超过10MB,原因可能是master写入流量过高
Big client buffers: 普通客户端缓冲区的平均内存超过200KB,原因可能是pipeline使用不当或者Pub/Sub客户端处理消息不及时导致
  • malloc stats & malloc purge

这两个用于操作jemalloc,只在使用jemalloc的时候才有效。

LFU&hotkey

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

object freq user_key

基于LFU机制,用户可以使用 scan + object freq 来发现热点key,当然redis也一起发布了更好用的工具——redis-cli,使用实例如下所示。

$./redis-cli --hotkeys

# Scanning the entire keyspace to find hot keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).

[00.00%] Hot key 'counter:000000000002' found so far with counter 87
[00.00%] Hot key 'key:000000000001' found so far with counter 254
[00.00%] Hot key 'mylist' found so far with counter 107
[00.00%] Hot key 'key:000000000000' found so far with counter 254
[45.45%] Hot key 'counter:000000000001' found so far with counter 87
[45.45%] Hot key 'key:000000000002' found so far with counter 254
[45.45%] Hot key 'myset' found so far with counter 64
[45.45%] Hot key 'counter:000000000000' found so far with counter 93

-------- summary -------

Sampled 22 keys in the keyspace!
hot key found with counter: 254 keyname: key:000000000001
hot key found with counter: 254 keyname: key:000000000000
hot key found with counter: 254 keyname: key:000000000002
hot key found with counter: 107 keyname: mylist
hot key found with counter: 93  keyname: counter:000000000000
hot key found with counter: 87  keyname: counter:000000000002
hot key found with counter: 87  keyname: counter:000000000001
hot key found with counter: 64  keyname: myset

其他

redis-4.0还有一些其他新的特性对用户来说是透明的,未来阿里云也会在4.0的基础上为用户提供更加丰富的功能,敬请期待!

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
缓存 NoSQL API
redis6新功能
redis6新功能
|
4月前
|
NoSQL Cloud Native Redis
|
6月前
|
缓存 NoSQL API
【Redis】Redis6.0 新功能
【Redis】Redis6.0 新功能
96 0
【Redis】Redis6.0 新功能
|
缓存 编解码 NoSQL
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! Redis 6.0.1 于 2020 年 5 月 2 日正式发布了,如 Redis 作者 antirez 所说,这是迄今为止最“企业”化的版本,也是有史以来改动最大的一个 Redis 版本,同时也是参与开发人数最多的一个版本。
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
|
NoSQL Redis 存储
5分钟带你了解Redis 5.0新功能 内含重量级特性解读
Redis是目前最流行的KV缓存数据库,它简单易用,安全稳定,在互联网行业有着非常广泛的应用。
2780 0
|
缓存 编解码 NoSQL
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?(下)
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
215 0
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?(下)
|
缓存 NoSQL API
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?(上)
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
177 0
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?(上)
|
存储 NoSQL Redis
Redis 5.0新功能介绍
Redis5.0是Redis产品的重大版本发布。新增的stream数据结构,提供了丰富的应用场景和想象空间;内核的改进和bugfix,使用更健壮;支持账号体系,根据账号用途赋予相应的权限,更加安全;审计日志,记录了读写操作、敏感操作(keys、flushall等)、慢日志、管理类命令,供用户查询;大key分析,基于快照的完整内存分析,更准确,直接输出内存消耗top排行的key;支持单机和集群版的平滑迁移。
10428 0
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
77 6
|
13天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
下一篇
无影云桌面