美文网首页
redis中的rehash?

redis中的rehash?

作者: 就这些吗 | 来源:发表于2019-12-30 01:56 被阅读0次

    Redis中所有数据都有key-value,这是通过哈希表实现的,redis的字典数据结构保存了两张哈希表,采取了渐进哈希的方法。
    字典与渐进式rehash
    总结:

    (1)redis字典使用哈希表作为底层实现,哈希表使用链地址法解决键冲突
    (2)每个字典有两个哈希表,ht[0]在平常使用,ht[1]在rehash时使用
    (3)rehash并不是一次性完成的,而是渐进式的进行。

    在此过程中,字典的增删改查操作会同时在ht[0],ht[1]两个表上进行,比如:

    查找一个键,会先在ht[0]中查找,没找到再到ht[1]中找。
    新添加到字典的键值对一律会被保存到ht[1]中而不是ht[0].

    Redis在持久化时,如果是采用BGSAVE命令或者BGREWRITEAOF的方式,那Redis会fork出一个子进程来读取数据,从而写到磁盘中。

    总体来看,Redis还是读操作比较多。如果子进程存在期间,发生了大量的写操作,那可能就会出现很多的分页错误(页异常中断page-fault),这样就得耗费不少性能在复制上。
    而在rehash阶段上,写操作是无法避免的。所以Redis在fork出子进程之后,将负载因子阈值提高,尽量减少写操作, 避免不必要的内存写入操作,最大限度地节约内存。

    相关文章

      网友评论

          本文标题:redis中的rehash?

          本文链接:https://www.haomeiwen.com/subject/cvcrnctx.html