首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从源码上聊聊Redis-String、List的结构实现

    当我们对embstrencoding的字符串对象执行任何修改命令(例如append)时,程序会先将对象的encoding从embstr转换成raw,然后再执行修改命令。...这样获取字符串长度的时候,只需要返回这个成员变量值就行,时间复杂度只需要 O(1)。 alloc,分配给字符数组的空间长度。...Return ASAP if there is enough space left. */ if (avail >= addlen) return s; //剩余空间足够,无需扩展,直接返回...,我们使用的永远都是同一个迭代器,先不看if里面的内容,可以看出返回的是一个节点信息,同时迭代器里面的next指针进行移动,移动方向看遍历方向,0为往后继遍历,1为往前驱遍历 优势与缺陷 Redis 的链表实现优点如下.../* Each entry in the listpack is either a string or an integer. */ typedef struct { /* When string

    1.2K171

    Redis中string、list的底层数据结构原理

    Redis 的五大数据结构使用简介 Redis 有一个比较突出的特点就是数据结构更丰富, 「string、hash、list、set、zset、Redis5.0 新数据结构-stream」 这部分的使用相对简单...Redis-字符串对象(string) 我们还是通过上一节课的那个例子看一下string类型的底层结构是什么,通过object encoding key 命令来查看具体的存储结构 上图可以看到不同的字符串其内部的结构不一样...0'),那么还剩余 44 个字节,所以如果在 44 个字节以内字符串就可以放在缓存行里面,从而减少了内存I/O次数 embstr 编码方式的优点: embstr 编码将创建字符串对象所需的内存分配次数从...unsigned char *p; // 指向节点的指针 } zlentry; void zipEntry(unsigned char *p, zlentry *e) { // 根据节点指针返回一个...以此类推 list-compress-depth 0 总结 本节内容主要讲解了Redis中string、list对象底层结构,string通过int、raw、embstr三种结构来表示,而list在3.2

    1.6K20
    领券