38

redis5.x新特性,Stream流数据类型使用简单教程

 5 years ago
source link: http://ourjs.com/detail/5bcf2687ac52fe63eba502a7?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

事实上Redis的数据类型一直都是二进制安全的,几乎每一种数据类型都是可以用来存储流的。那为什么Redis 5.0要引用Stream数据类型呢? 具体如何使用?

Stream是什么

在一般的编程概念里,流是一种主要用于优化内存的数据类型,它不需要一次性把大量数据,比如说大文件一次性读取到内存再处理,可以边读取边处理,这样可以用少量内存就可以处理大文件。

因此简单地说,流是Redis一种新的数据结构,不需要读取原有key的值,就可以在此key中添加新内容的数据类型。

Stream添加

Stream可以用更抽象的方式来记录数据,比如说日志。

Stream类型存储的不是一个字符串,而是多个键值对,比如:

XADD mystream * sensor-id 1234 temperature 19.8
> 1518951480106-0

代表往mystream添加新的数据 { "sensor-id": 1234, "temperature": 19.8 }, *代表服务器端生成一个新的EntryID

1518951480106-0 是代表这组数据的EntryID值,可以理解为日志中的行号。1518951480106是当前时间的毫秒值,0代表这一时侯的第几个数据。可以用XLEN查看总数据个数。

> XLEN mystream
(integer) 1

也可以自己指定EntryID的值,如:

> XADD somestream 0-1 field value
0-1
> XADD somestream 0-2 foo bar
0-2

流是只增不减的,所以如果entryid值比之前的小,则会报错:

> XADD somestream 0-1 foo bar
(error) ERR The ID specified in XADD is equal or smaller than the target stream top item

Stream查询

可以用 XRANGE/XREVRANGE 来查找,- + 代表查找所有的。

> XRANGE mystream - +
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"
2) 1) 1518951482479-0
   2) 1) "sensor-id"
      2) "9999"
      3) "temperature"
      4) "18.2"

可以指定EntryID的值范围,可以理解为取某个时间段的日志内容

> XRANGE mystream 1518951480106 1518951480107
1) 1) 1518951480106-0
   2) 1) "sensor-id"
      2) "1234"
      3) "temperature"
      4) "19.8"

可以只取前两个

> XRANGE mystream - + COUNT 2
1) 1) 1519073278252-0
   2) 1) "foo"
      2) "value_1"
2) 1) 1519073279157-0
   2) 1) "foo"
      2) "value_2"

Redis流介绍 https://redis.io/topics/streams-intro

Redis 5.0的主要改进:

1.新的Stream数据类型。 

2.新的Redis模块API:Timers and Cluster API。

3.RDB 现在可存储 LFU 和 LRU 信息

4.集群管理器从Ruby(redis-trib.rb)迁移到C。`redis-cli —cluster help`了解更多。

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. 引入 Dynamic HZ 平衡CPU空闲时的使用率和响应性

19. 重构了Redis 核心代码,并进行多方面改进

详情: https://raw.githubusercontent.com/antirez/redis/5.0/00-RELEASENOTES


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK