十四、Redis 哈希算法
当要将一个新的键值对添加到字典里面时, 程序需要先根据键值对的键计算出哈希值和索引值, 然后再根据索引值, 将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。 Redis 计算哈希值和索引值的方法如下: # 使用字典设置的哈希函数,计...
当要将一个新的键值对添加到字典里面时, 程序需要先根据键值对的键计算出哈希值和索引值, 然后再根据索引值, 将包含新键值对的哈希表节点放到哈希表数组的指定索引上面。 Redis 计算哈希值和索引值的方法如下: # 使用字典设置的哈希函数,计...
Redis 的字典使用哈希表作为底层实现, 一个哈希表里面可以有多个哈希表节点, 而每个哈希表节点就保存了字典中的一个键值对。 接下来的三个小节将分别介绍 Redis 的哈希表、哈希表节点、以及字典的实现。 哈希表 Redis 字典所使用的...
获取 IDEA 激活码、PyCharm 激活码、WebStorm 激活码和 DataGrip 激活码,提供详细破解教程与永久激活方法。支持 IDEA 永久激活与破解,免费获取注册码与激活码,解决 2024/2025 版本激活问题,轻松实现所有 JetBrains 工具的激活。
链表被广泛用于实现 Redis 的各种功能, 比如列表键, 发布与订阅, 慢查询, 监视器, 等等。 每个链表节点由一个 listNode 结构来表示, 每个节点都有一个指向前置节点和后置节点的指针, 所以 Redis 的链表实现是双端链表...
表 3-1 列出了所有用于操作链表和链表节点的 API 。 表 3-1 链表和链表节点 API 函数 作用 时间复杂度 listSetDupMethod 将给定的函数设置为链表的节点值复制函数。 。 listGetDupMeth...
每个链表节点使用一个 adlist.h/listNode 结构来表示: typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *ne...
《C 语言接口与实现:创建可重用软件的技术》 一书的第 15 章和第 16 章介绍了一个和 SDS 类似的通用字符串实现。 维基百科的 Binary Safe 词条(http://en.wikipedia.org/wiki/Binary-s...
Redis 只会使用 C 字符串作为字面量, 在大多数情况下, Redis 使用 SDS (Simple Dynamic String,简单动态字符串)作为字符串表示。 比起 C 字符串, SDS 具有以下优点: 常数复杂度获取字符串长度。...
表 2-2 列出了 SDS 的主要操作 API 。 表 2-2 SDS 的主要操作 API 函数 作用 时间复杂度 sdsnew 创建一个包含给定 C 字符串的 SDS 。 , N 为给定 C 字符串的长度。...
根据传统, C 语言使用长度为 N+1 的字符数组来表示长度为 N 的字符串, 并且字符数组的最后一个元素总是空字符 '\0' 。 比如说, 图 2-3 就展示了一个值为 "Redis" 的 C 字符串: C 语言使用的这种简单的字符串表示...
每个 sds.h/sdshdr 结构表示一个 SDS 值: struct sdshdr { // 记录 buf 数组中已使用字节的数量 // 等于 SDS 所保存字符串的长度 int len; // 记录 buf 数组中未使用字节的数量 i...