加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Redis观念以及底层数据布局

发布时间:2019-04-18 08:42:25 所属栏目:编程 来源:佚名
导读:Redis 简介 REmote DIctionary Server(Redis) 是一个由SalvatoreSanfilippo写的key-value存储体系。 Redis是一个开源的行使ANSI C说话编写、遵守BSD协议、支持收集、可基于内存亦可耐久化的日记型、Key-Value数据库,并提供多种说话的API。 它凡是被称为数

intset是一个整数荟萃,内里存的为某种统一范例的整数,支持如下三种长度的整数:

  1. #define INTSET_ENC_INT16 (sizeof(int16_t))  
  2. #define INTSET_ENC_INT32 (sizeof(int32_t))  
  3. #define INTSET_ENC_INT64 (sizeof(int64_t))  

intset是一个有序荟萃,查找元素的伟大度为O(logN),但插入时不必然为O(logN),由于有也许涉及到进级操纵。好比当荟萃里满是int16_t型的整数,这时要插入一个int32_t,那么为了维持荟萃中数据范例的同等,那么全部的数据城市被转换成int32_t范例,涉及到内存的从头分派,这时插入的伟大度就为O(N)了。

intset不支持降级操纵。

  • 有序荟萃工具

有序荟萃的编码也许两种,一种是ziplist,另一种是skiplist与dict的团结。

ziplist作为荟萃和作为哈希工具是一样的,member和score次序存放。凭证score从小到大次序分列

skiplist是一种跳跃表,它实现了有序荟萃中的快速查找,在大大都环境下它的速率都可以僻静衡树差不多。但它的实现较量简朴,可以作为均衡树的更换品。它的布局较量非凡。下面别离是跳跃表skiplist和它内部的节点skiplistNode的布局体:

  1. /*  
  2. * 跳跃表  
  3. */  
  4. typedef struct zskiplist {  
  5. // 头节点,尾节点  
  6. struct zskiplistNode *header, *tail;  
  7. // 节点数目  
  8. unsigned long length;  
  9. // 今朝表内节点的最大层数  
  10. int level;  
  11. } zskiplist;  
  12. /* ZSETs use a specialized version of Skiplists */  
  13. /*  
  14. * 跳跃表节点  
  15. */  
  16. typedef struct zskiplistNode {  
  17. // member 工具  
  18. robj *obj;  
  19. // 分值  
  20. double score;  
  21. // 退却指针  
  22. struct zskiplistNode *backward;  
  23. // 层  
  24. struct zskiplistLevel {  
  25. // 提高指针  
  26. struct zskiplistNode *forward;  
  27. // 这个层超过的节点数目  
  28. unsigned int span;  
  29. } level[];  
  30. } zskiplistNode;  

head和tail别离指向头节点和尾节点,然后每个skiplistNode内里的布局又是分层的(即level数组)

用图暗示,或许是下面这个样子:

总结

以上简朴先容了Redis的简介,特征以及五种工具范例和五种工具范例的底层实现。究竟上,Redis的高效性和机动性正是得益于统一个工具范例回收差异的底层布局,而且在须要的时辰对二者举办转换,尚有就是各类底层布局对内存的公道操作。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读