Redis 5.0

Redis5.0版是Redis产品的重大版本发布,我们先看一下它的最新特点:

  1. 新的流数据类型(Stream data type) https://redis.io/topics/streams-intro
  2. 新的 Redis 模块 API:定时器、集群和字典 API(Timers, Cluster and Dictionary APIs)
  3. RDB 增加 LFU 和 LRU 信息
  4. 集群管理器从 Ruby (redis-trib.rb) 移植到了redis-cli 中的 C 语言代码
  5. 新的有序集合(sorted set)命令:ZPOPMIN/MAX 和阻塞变体(blocking variants)
  6. 升级 Active defragmentation 至 v2 版本
  7. 增强 HyperLogLog 的实现
  8. 更好的内存统计报告
  9. 许多包含子命令的命令现在都有一个 HELP 子命令
  10. 客户端频繁连接和断开连接时,性能表现更好
  11. 许多错误修复和其他方面的改进
  12. 升级 Jemalloc 至 5.1 版本
  13. 引入 CLIENT UNBLOCK 和 CLIENT ID
  14. 新增 LOLWUT 命令 http://antirez.com/news/123
  15. 在不存在需要保持向后兼容性的地方,弃用 "slave" 术语
  16. 网络层中的差异优化
  17. Lua 相关的改进
  18. 引入动态的 HZ(Dynamic HZ) 以平衡空闲 CPU 使用率和响应性
  19. 对 Redis 核心代码进行了重构并在许多方面进行了改进

Redis Stream

Redis stream本质上是个时序数据结构,具有如下特点:

  1. 每条记录是结构化、可扩展的对
  2. 每条记录在日志中有唯一标识,标识中包含了时间戳信息,单调递增
  3. 可以根据需要自动清理历史记录
  4. 保存在内存中,支持持久化

底层是修改版的radix tree,每个node存储了一个listpack。listpack是一块连续的内存block,用于序列化msg entry及相关元信息,如msg ID,使用了多种编码,用于节省内存,是ziplist的升级版。如果XADD每次添加的对中的field是一样的,那么field不会重复存储。

内存友好,对于简单的十几~几十字节的msg,100MB内存可以存储数百万个。listpack在内存和disk上的存储结构是一样的,所以stream数据在做RDB时效率非常高,0.3s,500w entries。

Redis Stream使用演示

发布消息

读取消息

阻塞读取

发布新消息

消息返回

创建消费组

通过消费组读取消息

Redis Stream使用场景

可用作时通信等,大数据分析,异地数据备份等

客户端可以平滑扩展,提高处理能力

Zpop

Sorted Sets 增加了类似List的pop命令:
ZPOPMAX 命令用于移除并弹出有序集合中分值最大的 count 个元素
ZPOPMIN 命令用于移除并弹出有序集合中分值最小的 count 个元素
BZPOPMAX 和 BZPOPMIN 是上述两个命令的阻塞变种.

CLIENT:

Client id返回当前连接的ID,每个ID符合如下约束:

  1. 永不重复,可以判断当前链接是否断链过
  2. 单调递增,可以判断不同链接的接入顺序

Client unblock:
当客户端因为执行具有阻塞功能的命令(如BRPOP、XREAD或者WAIT)被阻塞时,该命令可以通过其他连接解除客户端的阻塞

阿里云Redis 5.0优势:

  1. 新增的stream数据结构,丰富的应用场景和想象空间
  2. 内核的改进和bugfix,使用更健壮
  3. 支持账号体系,根据账号用途赋予相应的权限,更加安全
  4. 审计日志,记录了读写操作、敏感操作(keys、flushall等)、慢日志、管理类命令,供用户查询
  5. 大key分析,基于快照的完整内存分析,更准确,直接输出内存消耗top排行的key
  6. 支持单机和集群版的平滑迁移

本文作者:stools

原文链接

本文为云栖社区原创内容,未经允许不得转载。

Redis 5.0新功能介绍的更多相关文章

  1. Redis 4.0新功能介绍

    Redis 的作者 antirez 在三天之前通过博客文章<The first release candidate of Redis 4.0 is out>发布了 Redis 4.0 的第 ...

  2. Redis 7.0 新功能新特性总览

    说明:本文根据Redis 7 RC2 的release note 整理并翻译 近日,Redis 开源社区发布了7.0的两个预览版.在这两个预览版中,有很多Redis 7.0中新增加的特性,新增加的命令 ...

  3. Redis 6.0 新特性 ACL 介绍

    Redis 6.0 新特性 ACL 介绍 Intro 在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Redis 中是没有用户的概念的,其实 ...

  4. Eviews 8.0&9.0界面新功能介绍

    Eviews 8.0&9.0界面新功能介绍 本文其中一些是自己的整理,也有一些是经管之家论坛中一位热心.好学坛友的整理,其中只是简单介绍一下这两个新版本的部分特性,分享出来,有兴趣的看客可以一 ...

  5. Kafka 0.11新功能介绍:空消费组延迟rebalance

    Kafka 0.11新功能介绍:空消费组延迟rebalance 在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer inst ...

  6. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  7. 原创开源项目HierarchyViewer for iOS 2.1 Beta新功能介绍

    回顾 HierarchyViewer for iOS是我们发布的一个开源项目,采用GPL v3.0协议. HierarchyViewer for iOS可以帮助iOS应用的开发和测试人员,在没有源代码 ...

  8. Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性

    Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...

  9. webpack 4.0.0-beta.0 新特性介绍

    webpack 可以看做是模块打包机.它做的事情是:分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式 ...

随机推荐

  1. Chai.js断言库API中文文档

    基于chai.js官方API文档翻译.仅列出BDD风格的expect/should API.TDD风格的Assert API由于不打算使用,暂时不放,后续可能会更新. BDD expect和shoul ...

  2. Constructing Roads POJ - 2421 (最小生成树)

    思路:首先使用二维数组dis[][]处理输入, 对于已经修好的路,将其对应的dis[i][j]置为零即可.最后再将    所有的dis[][]保存到边结构体中,使用Kruskal算法求得最小生成树. ...

  3. MySQL中一条更新语句是如何执行的

    1.创建表的语句和更新的语句 这个表的创建语句,这个表有一个主键ID和一个整型字段c: mysql> create table T(ID int primary key, c int); 如果要 ...

  4. 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  5. win10 ubuntu 双系统启动顺序设置

    之前安装ubuntu的时候就遇到过这个问题, 当时解决了,设置成开始可以选择启动ubuntu系统还是win系统. 但是过了好久后又忘记了,最近win10开了一次安全模式启动后,一开机就是win10,u ...

  6. NOIP模拟 6.28

    NOIP模拟赛6.28 Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这 ...

  7. HR招聘_(九)_招聘方法论(面试环节·薪资谈判和心理把控)

    .薪资谈判 薪资谈判在整个过程中非常重要,如果这一环出现问题前期的所有付出都功亏一篑,无法达成招聘目标. 谈判过程中需要遵循以下原则: 明确 通过面试后需要再次确认候选人的目前薪资和期望,虽然第一次电 ...

  8. POJ 2311 博弈

    #include<stdio.h> #include<string.h> #include<set> using namespace std; ][]; int s ...

  9. java路径中'/'的使用

    考虑java的跨系统:uinux和winw7中的‘/'标识方法不同,使用下放语句可避免 File.separator;//代表"/"

  10. DIV元素垂直居中的分析与实现

    首先,对于需要垂直居中的元素常规居中处理 margin: 0 auto; 接下来要设置div的祖先元素的宽高为100%, 在默认的设置中他们都为0: html, body { width: %; he ...