码迷,mamicode.com
首页 > 其他好文 > 详细

redis学习总结一

时间:2018-01-01 23:42:34      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:整数   函数   修改   simple   监视   redis学习   数组   查询   skiplist   

 

1、简单动态字符串

Redis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态字符串)作为字符串表示。

比起C字符串,SDS具有以下优点:

1)常数复杂度获取字符串长度

2)杜绝缓冲区溢出

3)减少修改字符串长度时所需的内存重分配次数

4)二进制安全

5)兼容部分C字符串函数

 

2、链表

1)链表被广泛用于实现Redis的各种功能,比如列表键、发布与订阅、慢查询、监视器等

2)每个链表节点由一个listNode结构来表示,每个节点都有一个指向前置节点和后置节点的指针,所有Redis的链表实现双端链表

3)每个链表使用一个list结构来表示,这个结构带有表头节点指针、表尾节点指针,以及链表长度等信息

4)因为链表表头节点的前置节点和表尾节点的后置节点都指向NULL,所以Redis的链表实现无环链表

5)通过为链表设置不同的类型特定函数,Redis的链表可以用于保存各种不同类型的值。

 

3、字典

1)字典被广泛用于实现Redis的各种功能,其中包括数据库哈希键

2)Redis中的字典使用哈希表作为底层实现,每个字典带有两个哈希表,一个平时使用,另一个仅在进行rehash时使用

3)当字典被用作数据库的底层实现,或者哈希键的底层实现时,Redis使用MurmurHash2算法来计算键的哈希值

4)哈希表使用链地址来解决键冲突,被分配到同一个索引上的多个键值对会连接成一个单向链表

5)在对哈希表进行扩展或者收缩操作时,程序需要将现有哈希表包含的所有键值对rehash到新哈希表里面,并且对这个rehash过程并不是一次性地完成的,而是渐进式地完成的

 

4、跳跃表

1)跳跃表是有序集合的底层实现之一

2)Redis的跳跃表实现由zskiplist和zskiplistNode两个结构组成,其中zskiplist用于保存跳跃表信息(比如表头节点、表尾节点、长度),而zskiplistNode则用于表示跳跃节点

3)每个跳跃表节点的层高都是1至32之间的随机数

4)在同一个跳跃表中,多个节点可以包含相同的分值,但每个节点的成员对象必须是唯一的

5)跳跃表中的节点按照分值大小进行排序,当分值相同时,节点按照成员对象的大小进行排序

 

6、整数集合

1)整数集合是集合键底层实现之一

2)整数集合的底层实现为数组,这个数组以有序、无重复的方式保存集合元素,在有需要时,程序会根据新添加的类型,改变这个数组的类型

3)升级操作为整数集合带来了操作上的灵活性,并且尽可能地节约内存

4)整数集合只支持升级操作,不支持降级操作

 

7、压缩列表

1)压缩列表是一种为节约内存而开发的顺序型数据结构

2)压缩列表被用作列表键哈希键的底层实现之一

3)压缩列表可以包含多个节点,每个节点可以保存一个字节数组或者整数值

4)添加新节点到压缩列表,或者从压缩列表中删除节点,可能会引发连锁更新操作,但这种操作出现的几率并不高

 

redis学习总结一

标签:整数   函数   修改   simple   监视   redis学习   数组   查询   skiplist   

原文地址:https://www.cnblogs.com/linst/p/8169102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!