首先 创建一个消息流: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。
希望各位前辈能给我解答一下,谢谢。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…