网站推广信息,北京东直门 网站建设,人性本私wordpress,wordpress 3d线条人生就像骑自行车#xff0c;要保持平衡#xff0c;就必须保持前进。 — 爱因斯坦 说到数据结构#xff0c;或许就能想到哈希表#xff0c;列表集合等数据结构。对于redis来说对应的key的value的形式也可以是这些数据结构#xff0c;如下#xff1a; 针对上面…人生就像骑自行车要保持平衡就必须保持前进。 — 爱因斯坦 说到数据结构或许就能想到哈希表列表集合等数据结构。对于redis来说对应的key的value的形式也可以是这些数据结构如下 针对上面的每种数据结构无论是哈希还是列表和集合他们都有自己的底层内部编码实现这样redis会在合适的场景选择合适的内部编码。在源代码层面实现特定的优化。来达到节省时间节省空间的效果。 redis承诺现在redis中的hash表进行查询插入删除等操作的时间复杂度都为O1但是它里面不一定就是一个标准的hash。 也就是说这里redis给出的数据结构可以理解为redis承诺的一种数据类型。 下面是redis各种数据结构的内部编码
数据结构内部编码stringraw int embstrhashhashtable ziplistlistlinkedlist ziplistquicklistsethashtable intsetzsetskiplist ziplist 解析
raw最基本的字符串底层是持有一个char数组C或者byte数组intredis通常也可以用来实现一些计数功能当value就是一个整数的时候此时可能redis会直接使用int来保存embstr针对短字符串的特殊优化。 上面三种是redis自动适应的程序员一般感应不到。
hashtable最基本的hash表redis内部的hash表实现。ziplist压缩列表在hash表的元素比较少的时候可能就优化为ziplist压缩列表可以节省空间linkedlist链表从3.2开始引入了quicklistlist里面的实现从此就变成了quicklist了而不再有linkedlist和ziplist因为它同时兼顾了linkedlist和ziplist的有点intset集合中存放的都是整数skiplist跳表跳表也是链表不同于普通的链表每个节点有多个指针域巧妙的搭配这些指针域的指向实现从跳表上查询元素的时间复杂度为O
查看key对应的value实际的编码方式 使用object encoding key
演示 查看key1的value和其编码格式 查看对应value值为“111”的key 虽然存的是111但是由于他是数字所以使用的是int来存储.
等等等等不一一举例。