Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 其他分享 › 实践Redis Stream与Java API互通

实践Redis Stream与Java API互通

Eswlnk的头像
Eswlnk
2022-06-14 12:32:00
实践Redis Stream与Java API互通-Eswlnk Blog
智能摘要 AI
本文介绍了如何使用Redis流进行消息处理,包括添加、修剪、删除、获取消息长度以及读取消息等操作。作者通过具体代码示例展示了如何使用Redis流的XADD、XTRIM、XDEL、XLEN和XREAD等API,并强调了不同API的参数配置方法。此外,还提到了XRANGE用于获取指定范围内的消息。作者指出Redis流相比传统消息队列具有持久化优势,适合需要高可靠性的场景。文中提供了Maven和Gradle依赖配置,并建议读者根据实际需求调整API参数。

最近一段时间,我们在工作中用到了这个消息中间件,而其他小组的同事们也都作出了最后的决定。当然,我自己编写的性能测试框架也必须要访问这个消息系统。我也在努力的学习。

实践Redis Stream与Java API互通-Eswlnk Blog

Redis流是最新版本5.0中的一个新的数据结构。Redis流主要在消息队列(MQ,消息 Queue)中使用, Redis发行订阅(pub/sub)来完成消息队列,但其缺点是消息不能持久,一旦网络中断、 Redis停机,这些信息都会被删除。

以前他都不知道 Redis的用法,现在看来,他已经很久没有遇到过这样的怪物了。和往常一样,我稍后会对基础特性做一些性能测试,以下是关于基础特性的演示。

准备工作

依赖

如果你想自己做,那就留意一下,我在查找数据的时候,发现 API和其他版本的 API有很大的区别,这就像是一个陷阱。当您在使用redis.cl ie nts的另一个版本时,您可以通过浏览源代码来了解有关的参数类型。

Maven依赖:

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.3</version>
</dependency>

Gradle依赖:

// https://mvnrepository.com/artifact/redis.clients/jedis
implementation 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<Integer, String>()
        map.put("eswink", 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()

    }

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

实践Redis Stream与Java API互通-Eswlnk Blog

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<java.lang.String,redis.clients.jedis.StreamEntryID>)第二个参数,这里常用的两种:

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

遍历消息:

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

控制台响应如下:

16:40:56.065 main redis连接池IP:127.0.0.1,端口:6379,超时设置:5000
16:40:56.280 main 1
1653725282325-0
2022-05-28 16:08:02 325
1653725282325-1
2022-05-28 16:08:02 325
1653725282325-2
2022-05-28 16:08:02 325

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

该 API在特定的区域中获取一个开始和结束的信息,它可以传递 String类型的信息 ID,或者发送redis.clients.je dis. StreamEntryID。

jedis.xrange("fun", "1653129389045-0", "1653129389047-0")
实践Redis Stream与Java API互通-Eswlnk Blog

Have Fun ~ Tester !

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
java redis连接java面试题jedisredisredis stream消息队列redis的五种数据类型
1
0
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
关于Flutter Web刷新与后退问题的解决方法
上一篇
全新 Go 1.19 到底有什么新功能?
下一篇

评论 (0)

请登录以参与评论
现在登录
    发表评论

猜你喜欢

  • 「亲测有效」Google Gemini 学生优惠:解决身份验证和支付卡验证
  • 解决国际版EdgeOne绑卡和手机验证问题
  • 小工具开发之EdgeOne免费计划兑换工具
  • 「其他分享」市面上静态页面服务商比较与推荐:选择最适合您的平台
  • 「图片优化」利用Cloudflare CDN减少回源Bucket流量
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

Poedit自动翻译插件|突破Poedit PRO版本限制实现在线翻译
2022-03-15 1:14:21
「其他分享」快速接入Google 验证码实现登录验证
2022-08-21 12:40:57
「其他分享」私有云搭建之道:虚拟化技术探秘与VMWare引领
2023-11-27 1:50:44

文章目录

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 1.108 秒   |  SQL查询 33 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈