Redis stream Java API实践

最近工作中使用到了消息中间件,另外一个组的同事经过评估选择了Redis stream作为最终选择。我自己写的性能测试框架自然也需要接入这套消息系统。所以我也抓紧学习起来。

Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。

之前还没发现Redis还有这种使用方法,着实有点少见过怪了。照例我后面会进行一些基本功能的性能测试,下面分享基本功能的使用演示。

准备工作

依赖

如果想自己操作的话,请注意这个版本,因为在我找资料的过程中发现,不同版本的API有不少的差异,算是踩了一些坑。如果你使用其他版本的redis.clients遇到代码无法运行的时候,可以直接翻看源码查看相关参数类型。

Maven依赖:

redis.clients jedis 4.2.3

Gradle依赖:

// https://mvnrepository.com/artifact/redis.clients/jedisimplementation group: ‘redis.clients’, name: ‘jedis’, version: ‘4.2.3’

Redis server版本:Redis 6.2.5。

XADD – 添加消息到末尾

如果key对应的队列不存在,则会自动创建。

首先我们需要创建一个redis.clients.jedis.params.XAddParams,顾名思义就是查询参数,这里面有重要的参数:redis.clients.jedis.params.XAddParams#maxLen表示设置队列的长度,但是不常用。语法如下:

def len = XAddParams.xAddParams()

xadd API使用方式如下:

public static void main(String[] args) { def base = new RedisBase(“127.0.0.1”, 6379) Jedis jedis = base.getJedis() def len = XAddParams.xAddParams() def map = new HashMap() map.put(“FunTester”, Time.getDate() + TAB + 325) jedis.xadd(“fun”, len, map) jedis.close() }

XTRIM – 对流进行修剪,限制长度

这个API就是设置队列长度。使用方式也非常简单。

public static void main(String[] args) { def base = new RedisBase(“127.0.0.1”, 6379) Jedis jedis = base.getJedis() def xtrim = jedis.xtrim(“fun”, XTrimParams.xTrimParams().maxLen(10)) output(xtrim) jedis.close() }

返回值是丢弃的消息的数量

XDEL – 删除消息

这个就是删除某个消息,使用更简单了。

public static void main(String[] args) { def base = new RedisBase(“127.0.0.1”, 6379) Jedis jedis = base.getJedis() jedis.xdel(“fun”,new StreamEntryID(1653129389004,1)) jedis.close() }

XLEN – 获取流包含的元素数量,即消息长度

话不多说了,使用如下:

jedis.xlen(“fun”)

XREAD – 以阻塞或非阻塞方式获取消息列表

这个要着重介绍一下,因为我用的就是这个,首先我们需要创建一个redis.clients.jedis.params.XReadParams,这里有两个参数:redis.clients.jedis.params.XReadParams#count和redis.clients.jedis.params.XReadParams#block。前者控制返回数量,后者控制阻塞时间,如果时间小于0则认为不阻塞,等于0则一直会阻塞,小于0会报错。不设置该参数责任无非阻塞模式。PS:数量不足不会造成阻塞。示例如下:

def block = XReadParams.xReadParams().count(3).block(1000)

还有我们需要redis.clients.jedis.Jedis#xread(redis.clients.jedis.params.XReadParams, java.util.Map)第二个参数,这里常用的两种:

Map entry = [“fun”: new StreamEntryID()]//获取历史消息 Map entry = [“fun”: StreamEntryID.LAST_ENTRY]//获取在请求之后添加的消息

遍历消息:

List<Map.Entry> xread = jedis.xread(block, entry) output(xread.size()) Map.Entry get = xread.get(0) def value = get.getValue() value.each { println(it.getID()) println(it.getFields().get(“FunTester”)) }

控制台响应如下:

16:40:56.065 main redis连接池IP:127.0.0.1,端口:6379,超时设置:500016:40:56.280 main 11653725282325-02022-05-28 16:08:02 3251653725282325-12022-05-28 16:08:02 3251653725282325-22022-05-28 16:08:02 325

XRANGE – 获取消息列表,会自动过滤已经删除的消息

这个API获取某个范围内的消息,有个start和end的参数,可以传String类型的消息ID,也可以传redis.clients.jedis.StreamEntryID,方法重载的比较多,有兴趣可以翻一翻源码。

jedis.xrange(“fun”, “1653129389045-0”, “1653129389047-0”)

后面会对Redis stream API进行性能测试,欢迎继续关注FunTester。

Have Fun ~ Tester !

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月13日
下一篇 2022年6月13日

相关推荐

  • 消息称英伟达再次推迟 GTX 1630 显卡上市时间

    IT之家 6 月 12 日消息,上个月,外媒 VideoCardz 首次曝光了 GTX 1630 入门级独显的消息,最初消息称它将在 5 月 31 日推出,之后消息称推迟 6 月 …

    2022年6月14日
  • 名记:贝弗利渴望加盟湖人 得知交易后非常激动

    直播吧8月25日讯 据名记Shams报道,湖人将霍顿-塔克送至爵士,换来34岁的控卫贝弗利。 据名记Woj报道,消息人士透露,贝弗利渴望加盟湖人,在得知这笔交易消息后非常激动。 贝…

    2022年8月27日
  • 短脖子星人快看过来

    总结:领口不是开得越大越好 领型以露出锁骨最佳 选择正肩版本显瘦不出错 避开累赘繁琐元素 利用配饰优化颈部线条

    2022年6月9日
  • 融资丨「Evinced」B轮融资3800万美元,Insight Partners领投

    创业邦获悉,以色列Web应用开发工具「Evinced」近期宣布完成3800万美元的B轮融资,由Insight Partners领投,M12、BGV、Capital One Vent…

    2022年6月29日
  • 注意了,华为交换机新版本开启telnet SSH发生变化了

    V200R020C00及之后版本,缺省情况下Telnet服务器端不接收来自任何接口登录连接的请求,当需要授权客户可以登录服务器时,需要执行如下任一命令指定Telnet服务器端的源接…

    2022年6月16日
  • 苹果手机系统要不要升级

    你们的苹果手机有更新到最新的系统版本吗?那个系统版本最合适那个手机型号,就拿苹果12来说吧! 我个人觉得苹果12的系统版本最合适14或者15,现在16系统版本都出来,但是不建议大家…

    2022年6月19日
  • 思皓E40X新能源

    思皓E40X外观独特,前脸融入了“机甲”元素,采用纯电动车型常用的封闭式进气格栅,配合较多的横线设计,营造出很强的层次感,而悬浮式车顶设计显得年轻时尚,看上去激进、运动,新车尾部则…

    2022年6月15日
  • 原神:须弥地图探索体验投票,地图设计是进步还是退后了呢

    随着原神3.0须弥地图的开放,玩家又开始了自己的探索之旅。那么3.0须弥版本的地图怎么样呢?本期玩咖宝典就带大家来看看大家对于原神3.0须弥版本地图的评价,看看对比之前的地图是进步…

    2022年8月26日
  • 做保险销售有什么方法寻找客户资源?

    保险业务员的获客渠道其实有很多的,主要是看你自己适合哪个渠道。简单的说一些获客渠道吧。 第一、缘故市场 这个是很多保险销售起步的地方,因为现在买保险的人很多,卖保险的人也很多,而中…

    2022年4月15日
  • S27赛季的版本陷阱,五个不建议用的英雄,吕布守约全部上榜

    大家好我是指尖,s27赛季已经进行了一个多月的时间了,按照战令的时间来看,已经不到一个月就要跨入下一个赛季了,那么本赛季大家的游戏体验如何呢?本文指尖给大家避避坑,这几个英雄 真心…

    2022年7月1日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息