采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
为什么在 dirty 复制 read 值的时候,遇到 entry 指向 nil 的时候要标记为 entry,而不是直接忽略就是了呢?这样下一次 read 继承 dirty 的时候,这个 entry 对应的 key 不是自然就不在了吗。
个人思考: 近期删除的 key 再次被存入可能性比较高(时间局部性?),让它暂时保存在 read 中有利于提高 read 的命中率从而提高读写效率。
想知道我的想法是否是正确的?
我觉得主要就是标记一下,下面的dirty没有这个key,如果遇到重新插入的情况,要在下面的dirty也插入这个key,否则dirty提升之后会丢失key。
那为什么不只用 nil 标记就好了呢?只要 read 中重新插入的 key 对应的 entry 为 nil,就在 dirty 上新建一个 key。
只用nil的话,没办法区分dirty里面有没有这个key吧,还要去dirty里查询一下。毕竟普通的删除时,也是写nil。
谢谢老师
登录后可查看更多问答,登录/注册
深入Go语言原理+Go重写Redis
378 7
452 5
337 4
366 4
457 4