问答

关于【redis5设计与源码分析】第八章Stream的不解

作者:admin 2021-05-14 我要评论

首先 创建一个消息流:xadd mystream * name hb age 20 根据这条指令,再参照图8-1,可以很容易明白 【* name hb age 20】是一条消息。比如ID1。*是redis自行生...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

首先 创建一个消息流:xadd mystream * name hb age 20
根据这条指令,再参照图8-1,可以很容易明白 【* name hb age 20】是一条消息。比如ID1。*是redis自行生成的消息ID,具有唯一性。
8.1.3 stream结构
<每个消息流都包含一个Rax结构。以消息ID为key,listpack结构为value存储在Rax结构中。每个消息的具体信息存储在这个listpack中>
也就是说【每个*自动生成的序号】是key,【name hb age 20】是listpack结构存储的value。
问题1:对于<每个listpack中可能存储多条消息>不理解,既然一条消息是一个ID,而且消息存储是key-value对。那么一个listpack应该存储的是一条具体消息内容吧?也就是value。一个listpack里面应该是有多个field,一个流有多个listpack吧。 问题2:这句话的意思是不是entry只存储field也就是name和age。

<每个listpack在创建时,会构造该节点的master entry(根据第一个插入的消息构建)>
问题3:这句话的意思也应该是listpack会存储多个消息也就是多个ID的具体消息吧

<每个消息会占用多个listpack entry>
问题4:综上所述,是不是说key存储在rax前缀树里,而所有的类似name,age的key-value对存储在listpack里,listpack有多个entry,比如一个消息ID是4567的消息有两个key-value对,每个value占一个entry?

问题5:消息的值也就是【name-hb】中的hb是存储在什么地方,是entry里面吗?因为我认为master ertry存储的公共field。

希望各位前辈能给我解答一下,谢谢。

###

是不是这么一个意思:就是listpack从放入消息的那一刻就存在了
然后由于一致性,首先创建master entry 包括很多字段都是entry
而真正的内容比如 name=hb 中的hb也是按照符合master entry 的field域的存储方式继续放在master entry的这些entry之后的,然后就形成了一个list形式的结构。
如果有多个消息的话,还是继续追加在后面。

个人理解,不知道对不对。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 请问下prometheus怎么进行自定义的按业

    请问下prometheus怎么进行自定义的按业

  • 节流函数为什么,点击无效,监听窗口大

    节流函数为什么,点击无效,监听窗口大

  • express访问静态资源失败

    express访问静态资源失败

  • IE 浏览器下 match 方法报错

    IE 浏览器下 match 方法报错

腾讯云代理商
海外云服务器