原标题:Beetlex.Redis之Stream功能详解

有一段时间没有写文章,techempower的测试规则评分竟然发生了变化,只能忘着补充一下占比权重最多的数据更新示例了和深入设计一下组件模块化加载的设计。但在不久前有用户问了一下组件是否支持redis的Stream功能,看了一样相关资料后把功能实现之;接下来就介绍一下如何用Beetlex.Redis来调用redis的Stream功能。

什么是Stream

是Redis5.0的Stream是一个新的强大的支持多播的可持久化的消息队列,它提供了消息添加,多组和多消费者一致性读取和ack确认等功能;更详细的介绍就不多说了可以通过网络找到更多详细描述。

创建Stream

组件通过RedisDB对象的GetStream访求来创建一个Stream访问对象,对象创建后就可以进行一系列的 XACK| XADD| XDEL| XGROUP| XLEN| XRANGE| XREAD| XREADGROUP| XREVRANGE|XTRIM等指令操作。创建代码如下:

RedisStream < Employee>stream = DB.GetStream < Employee>("employees_stream");

XADD

在介绍这个操作前先说一下Stream里存储的格式,默认Stream消息是K-V的格式,从基础指令上可以了解到这种结构

XADDmystream* sensor-id1234 temperature19 .8

但这种格式操作起来并不友好,所以组件除了支持这种K-V的方式外,还支持以对象的方式进行Stream消息处理。接下来看一下插入对象的调用

RedisStream stream = DB.GetStream( "employees_stream");

varid = awaitstream.Add(DataHelper.Defalut.Employees[ 0]);

id = awaitstream.Add(DataHelper.Defalut.Employees[ 1]);

id = awaitstream.Add(DataHelper.Defalut.Employees[ 2]);

varlen = awaitstream.Len;

组件支持直接入插对象,其基础指令就是

XADDemployees_stream* dateemployeejson

组件直接采用一个K-V的方式来存储对象,对于原则多个K-V的方式组件同样也支持,只是在构建Stream指定类型用Dictionary即可;接下其他就不多说了直接上指令用例了。

XLEN

RedisStream stream = DB.GetStream( "employees_stream");

varlen = awaitstream.Len;

XDEL

RedisStream stream = DB.GetStream( "employees_stream");

varitems = awaitstream.Read( null, null, "0-0");

awaitstream.Del(( fromitem initems selectitem.ID).ToArray);

XRANGE

RedisStream stream = DB.GetStream( "employees_stream");

varitems = awaitstream.Range;

items = awaitstream.RangeAll;

XREVRANGE

RedisStream stream = DB.GetStream( "employees_stream");

varitems = awaitstream.RevRange;

items = awaitstream.RevRangeAll;

XREAD

RedisStream stream = DB.GetStream( "employees_stream");

varitems = awaitstream.Read( 0, null, "0-0");

items = awaitstream.Read;

Stream的消费组

前面介绍的指令感觉列表结构都能满足,其实Stream重要的功能是在组消费这一块,Redis可以针对Stream创建多个消费组和消费者,而消息会做一致性消费处理。

XGROUP

RedisStream stream = DB.GetStream( "employees_stream");

vargroup= awaitstream.GetGroup( "henry");

XREAD

RedisStream stream = DB.GetStream( "employees_stream");

vargroup= awaitstream.GetGroup( "g1");

varitems = awaitgroup.Read( "henry", "0");

实际XRead提供了是否等待和起始读已取参数

publicasyncValueTask>> ReadWait( stringconsumer, inttimeout= 0

publicValueTask>> Read( stringconsumer, stringstart = null)

publicasyncValueTask>> Read( stringconsumer, int? block, int? count, stringstart = null)

一般情况下可以通过readwait来不停地消息新的消息

while( true)

{

items = awaitgroup.ReadWait( "henry");

//处理消息

foreach( varitem initems)

{

awaititem.Ack;

}

}

XACK

RedisStream stream = DB.GetStream( "employees_stream");

vargroup= awaitstream.GetGroup( "g1");

varitems = awaitgroup.Read( "henry", "0");

foreach( varitem initems)

awaititem.Ack;

以上是BeetleX.Redis组件提供操作Stream的基础指令,实际上Stream还有一些和运维相关的指令,只是这些在实际业务上用不上所以就没有去实现了。 返回搜狐,查看更多

责任编辑:

redis stream持久化_Beetlex.Redis之Stream功能详解相关推荐

  1. linux主从服务器不能同步,Linux下redis的持久化、主从同步与哨兵详解

    摘要: 1.0 redis持久化Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化... 1.0 redis持久化 Redis是一种内 ...

  2. linux redis哨兵 sh,Linux下redis的持久化、主从同步与哨兵详解

    1.0 redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. 1| ...

  3. 【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵

    [重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 文章目录 [重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 一.Redis ...

  4. mysql防止超发_PHP+redis实现的限制抢购防止商品超发功能详解

    本文实例讲述了PHP+redis实现的限制抢购防止商品超发功能.分享给大家供大家参考,具体如下: redis不仅仅是单纯的缓存,它还有一些特殊的功能,在一些特殊场景上很好用.redis中key的原子自 ...

  5. Redis入门 - 数据类型:5种基础数据类型详解

    Redis所有的key(键)都是字符串.我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String.List.Set.Zset.Hash Redis入门 - 数 ...

  6. java8 stream运行原理之并行流原理详解

    上一篇文章<java8 stream运行原理之顺序流原理详解>介绍了顺序流的执行原理,本文接着上一篇介绍并行流的执行原理. 一.如何创建并行流 调用parallel()方法可以创建并行流, ...

  7. Redis(十)——HyperLogLog 基数统计和 Bitmap位图场景详解

    文章目录 Redis(十)--HyperLogLog 基数统计和 Bitmap位图场景详解 1.HyperLogLog 基数统计 2.Bitmap位图场景详解 Redis(十)--HyperLogLo ...

  8. java 8 新功能详解_Java 8的8个新功能

    java 8 新功能详解 注意:确保还检查了我们的详细教程Java 8 Features – ULTIMATE Guide . Jdk 1.8(又名Java 8)今天发布,这意味着它的通用发布版本已经 ...

  9. KBQA_多轮对话——模型源码解析(一)Pickle模块功能详解

    KBQA_多轮对话--模型源码解析(一)Pickle模块功能详解 pickle --- Python 对象序列化的基本功能 1.pickle基本概念 2.pickle 与 json 模块的比较 3.p ...

最新文章

  1. 改变示波器TDS3054D图片颜色
  2. git如何添加远程主机_Git远程操作详解
  3. python2必须安装步骤_Python入门-第三方库的安装及环境配置(2)
  4. 小森生活一直服务器维护,《小森生活》怎么处理断线黑屏的问题 连接不上服务器解决办法...
  5. mysql 交集_MYSQL交集函数
  6. GBDT分类和回归例子
  7. [css] 手写一个满屏品字布局的方案
  8. 【CodeForces - 580D】Kefa and Dishes (状压dp)
  9. Apache并发请求数及其TCP连接状态故障排除
  10. Java锁的种类以及辨析(三):阻塞锁
  11. 【概率论与数理统计】目录
  12. php开发 公众号自动回复,微信公众号开发之文本消息自动回复php代码_php实例 - sha1...
  13. 桌面虚拟化是该选用IDV还是VDI?
  14. 单商户商城系统功能拆解47—应用中心—自定义海报
  15. input输入框输满3个字符自动跳到下一个input输入框
  16. OpenJudge[计算邮资]之满分代码
  17. 安装docker 配置 oracle11g
  18. 超市结算系统软件测试,软件测试报告-超市管理系统【参考】.doc
  19. Docker技术研究
  20. 航空总线1553B接口设计

热门文章

  1. 在Silverlight中绘制贝塞尔曲线
  2. 收藏几个有意思的SQL脚本
  3. 企业组网安全如何保障?SDWAN提供怎样的安全服务?
  4. IPSec的安全性如何?—微云MPLS
  5. Host XXX is not allowed to connect to this MySql 远程连接
  6. jQuery 事件绑定
  7. HTTP请求分析工具Fiddler
  8. 程序员需要谨记的9个安全编码规则【转载】
  9. 使用Fiddler解析WCF RIA Service传输的数据
  10. java学习与总结:计算机网络