美文网首页
redis之架构以及基本数据类型

redis之架构以及基本数据类型

作者: 中2庸 | 来源:发表于2021-12-27 16:47 被阅读0次

    redis由哪几个模块组成,每个模块有什么用

    访问框架:动态链接库、网络访问框架
    操作模块:PUT、DELETE、GET、SCAN【基本操作】,redis还有其他特殊操作对应不同的数据类型
    索引模块:查询数据
    存储模块:基于内存,同时提供持久化数据功能

    redis支持什么样的格式存储,每种数据支持哪些操作

    • key仅支持String
    • 对于value支持以下集中类型:
      字符串:String
      哈希表:Hash
      集合:Set
      排序集合:sorted Set
      压缩列表: Compressed Set
    • 底层数据结构一共有 6 种,分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组


      image.png
    • redis的key-value使用全局哈希表进行存储,其实就是一个数组,数组的每个元素称为一个哈希桶
        哈希桶中的 entry 元素中保存了key和value指针,分别指向了实际的键和值,这样一来,即使值是一个集合,也可以通过*value指针被查找到
      image.png
    • 哈希冲突如何解决
        使用链式处理法,出现冲突时使用指针链接到同一个桶的链表后面,如图所示


      image.png
    • rehash是什么以及如何解决大数据情境下rehash导致慢的问题
      rehash:rehash 也就是增加现有的哈希桶数量,让逐渐增多的 entry 元素能在更多的桶之间分散保存,减少单个桶中的元素数量,从而减少单个桶中的冲突;
        为了使 rehash 操作更高效,Redis 默认使用了两个全局哈希表:哈希表 1 和哈希表 2。一开始,当你刚插入数据时,默认使用哈希表 1,此时的哈希表 2 并没有被分配空间,随着数据逐步增多,Redis 开始执行 rehash,这个过程分为三步:
      1、给哈希表 2 分配更大的空间,例如是当前哈希表 1 大小的两倍;
      2、把哈希表 1 中的数据重新映射并拷贝到哈希表 2 中;
      3、释放哈希表 1 的空间。
    • Redis 采用了渐进式 rehash,解决大数据情况下rehash导致慢的问题
        Redis 仍然正常处理客户端请求,每处理一个请求时,从哈希表 1 中的第一个索引位置开始,顺带着将这个索引位置上的所有 entries 拷贝到哈希表 2 中;等处理下一个请求时,再顺带拷贝哈希表 1 中的下一个索引位置的 entries。如下图所示:


      image.png
    • 压缩列表
        压缩列表实际上类似于一个数组,数组中的每一个元素都对应保存一个数据。和数组不同的是,压缩列表在表头有三个字段 zlbytes、zltail 和 zllen,分别表示列表长度、列表尾的偏移量和列表中的 entry 个数;压缩列表在表尾还有一个 zlend,表示列表结束:


      image.png
    • 跳表
        有序链表只能逐一查找元素,导致操作起来非常缓慢,于是就出现了跳表。具体来说,跳表在链表的基础上,增加了多级索引,通过索引位置的几个跳转,实现数据的快速定位,如下图所示:


      image.png
    • 不同底层数据结构的时间复杂度


      image.png

      -不同操作的复杂度
      单元素操作是基础;范围操作非常耗时;统计操作通常高效;例外情况只有几个。

    redis的应用场景,可以解决哪些问题

    • 缓存问题
    • 秒杀
    • 分布式锁

    参考资料

    https://www.cnblogs.com/ysocean/p/9080942.html
    https://time.geekbang.org/column/article/268253

    相关文章

      网友评论

          本文标题:redis之架构以及基本数据类型

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