众所周知,redis 是行业的宠儿,下面是我对redis stream 的理解,如果有错误和不完整的地方,请大牛指教,互相学习。
首先在我们开始其命令之前,需要明白stream 的大致数据结构及场景。比如一个消息订单,物流、支付等服务模块需要消费,那么这种场景我们不妨使用stream 实现,在了解之前需了解其数据结构,看下图
大致讲解一下:
首先我们生成一个stream 消息,它是以KEY-VALUE 形式进行存储,Value中,它又是以类似于hashmap 结构进行存储,格式为message: mesagecontent id 时间戳/+序号,同时它可以对我们key 对应的消息进行升序和降序排列(XRANGE,XREVRANGE);消费者可以通过XDEL 进行消息的删除,读取可以进行阻塞读取和非阻塞读取2种方式。同时为了特殊的需求我们可以对stream 消息进行分组处理,比如我们straemgoup1,streamgroup2,分组之间互不影响,比如我们在分组一中进行消费,此时消息处理pending 状态,如果stream 一直没有收到ack确认消费的信号,那么一直为pending状态,我们可以根据我们的业务需要进行重新认领(XCLAIM) 和XTRIM 进行删除。不同分组可以对同一消息进行消费。
大致了解我们它的数据格式那我们学习其命令更加明白。在这里命令不在进行带着大家学习,自己可以进行练习,命令地址:http://www.redis.cn/commands.html#streams