使用redis的事务操作,获取到同一毫秒产生的多条数据,时间戳一样,序列号不一样
3、举例 1、获取所有的数据(-和+的使用) 127.0.0.1:6379> xrange stream-key - + 1) 1) "1636003481706-0" 2) 1) "username" 2) "zhangsan" 2) 1) "1636003481706-1" 2) 1) "username" 2) "lisi" 3) 1) "1636003499055-0" 2) 1) "username" 2) "wangwu" 127.0.0.1:6379>-: 表示最小id的值
+:表示最大id的值
2、获取指定id范围内的数据,闭区间 127.0.0.1:6379> xrange stream-key 1636003481706-1 1636003499055-0 1) 1) "1636003481706-1" 2) 1) "username" 2) "lisi" 2) 1) "1636003499055-0" 2) 1) "username" 2) "wangwu" 127.0.0.1:6379> 3、获取指定id范围内的数据,开区间 127.0.0.1:6379> xrange stream-key (1636003481706-0 (1636003499055-0 1) 1) "1636003481706-1" 2) 1) "username" 2) "lisi" 127.0.0.1:6379>(:表示开区间
4、获取某个毫秒后所有的数据 127.0.0.1:6379> xrange stream-key 1636003481706 + 1) 1) "1636003481706-0" 2) 1) "username" 2) "zhangsan" 2) 1) "1636003481706-1" 2) 1) "username" 2) "lisi" 3) 1) "1636003499055-0" 2) 1) "username" 2) "wangwu" 127.0.0.1:6379>直接写毫秒不写后面的序列号即可。
5、获取单条数据 127.0.0.1:6379> xrange stream-key 1636003499055-0 1636003499055-0 1) 1) "1636003499055-0" 2) 1) "username" 2) "wangwu" 127.0.0.1:6379>start和end的值写的一样即可获取单挑数据。
6、获取固定条数的数据 127.0.0.1:6379> xrange stream-key - + count 1 1) 1) "1636003481706-0" 2) 1) "username" 2) "zhangsan" 127.0.0.1:6379>使用 count进行限制
3、XREVRANGE反向查看Stream中的消息 XREVRANGE key end start [COUNT count]使用方式和XRANGE类似,略。
4、XDEL删除消息 1、命令格式 xdel key ID [ID ...] 2、准备数据 127.0.0.1:6379> xadd stream-key * username zhangsan "1636004176924-0" 127.0.0.1:6379> xadd stream-key * username lisi "1636004183638-0" 127.0.0.1:6379> xadd stream-key * username wangwu "1636004189211-0" 127.0.0.1:6379> 3、举例需求:往Stream中加入3条消息,然后删除第2条消息
127.0.0.1:6379> xdel stream-key 1636004183638-0 (integer) 1 # 返回的是删除记录的数量 127.0.0.1:6379> xrang stream -key - + 127.0.0.1:6379> xrange stream-key - + 1) 1) "1636004176924-0" 2) 1) "username" 2) "zhangsan" 2) 1) "1636004189211-0" 2) 1) "username" 2) "wangwu" 127.0.0.1:6379>注意:
需要注意的是,我们从Stream中删除一个消息,这个消息并不是被真正的删除了,而是被标记为删除,这个时候这个消息还是占据着内容空间的。如果所有Stream中所有的消息都被标记删除,这个时候才会回收内存空间。但是这个Stream并不会被删除。
6、XLEN查看Stream中元素的长度 1、命令格式 xlen key 2、举例查看Stream中元素的长度
127.0.0.1:6379> xadd stream-key * username zhangsan "1636004690578-0" 127.0.0.1:6379> xlen stream-key (integer) 1 127.0.0.1:6379> xlen not-exists-stream-key (integer) 0 127.0.0.1:6379>注意:
如果xlen后方的key不存在则返回0,否则返回元素的个数。
7、XTRIM对Stream中的元素进行修剪 1、命令格式 xtrim key MAXLEN|MINID [=|~] threshold [LIMIT count] 2、准备数据 127.0.0.1:6379> xadd stream-key * username zhangsan "1636009745401-0" 127.0.0.1:6379> multi OK 127.0.0.1:6379(TX)> xadd stream-key * username lisi QUEUED 127.0.0.1:6379(TX)> xadd stream-key * username wangwu QUEUED 127.0.0.1:6379(TX)> exec 1) "1636009763955-0" 2) "1636009763955-1" 127.0.0.1:6379> xadd stream-key * username zhaoliu "1636009769625-0" 127.0.0.1:6379> 3、举例 1、maxlen精确限制 127.0.0.1:6379> xtrim stream-key maxlen 2 # 保留最后的2个消息 (integer) 2 127.0.0.1:6379> xrange stream-key - + # 可以看到之前加入的2个消息被删除了 1) 1) "1636009763955-1" 2) 1) "username" 2) "wangwu" 2) 1) "1636009769625-0" 2) 1) "username" 2) "zhaoliu" 127.0.0.1:6379>上方的意思是,保留stream-key这个Stream中最后的2个消息。
2、minid模糊限制minid 是删除比这个id小的数据,本地测试的时候没有测试出来,略。
8、XREAD独立消费消息XREAD只是读取消息,读取完之后并不会删除消息。 使用XREAD读取消息,是完全独立与消费者组的,多个客户端可以同时读取消息。
1、命令格式 xread [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...] 2、准备数据 127.0.0.1:6379> xadd stream-key * username zhangsan "1636011801365-0" 127.0.0.1:6379> xadd stream-key * username lisi "1636011806261-0" 127.0.0.1:6379> xadd stream-key * username wangwu "1636011810905-0" 127.0.0.1:6379> 3、举例 1、获取用户名是wangwu的数据 127.0.0.1:6379> xread streams stream-key 1636011806261-0 # 此处写的是lisi的id,即读取到的数据需要是 > 1636011806261-0 1) 1) "stream-key" 2) 1) 1) "1636011810905-0" 2) 1) "username" 2) "wangwu" 2、获取2条数据 127.0.0.1:6379> xread count 2 streams stream-key 0-0 1) 1) "stream-key" 2) 1) 1) "1636011801365-0" 2) 1) "username" 2) "zhangsan" 2) 1) "1636011806261-0" 2) 1) "username" 2) "lisi" 127.0.0.1:6379>count限制单次读取最后的消息,因为当前读取可能没有这么多。
3、非阻塞读取Stream对尾的数据即读取队列尾的下一个消息,在非阻塞模式下始终是nil
127.0.0.1:6379> xread streams stream-key $ (nil) 4、阻塞读取Stream对尾的数据