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

Redis为何这么快——数据存储角度

发布时间:2018-10-12 15:59:20 所属栏目:编程 来源:JAVA高级程序员
导读:【新产物上线啦】51CTO播客,随时随地,碎片化进修 本文内容思想导图如下: 一、简介和应用 Redis是一个由ANSI C说话编写,机能优越、支持收集、可耐久化的K-K内存数据库,并提供多种说话的API。它常用的范例首要是 String、List、Hash、Set、ZSet 这5种 Re

这个布局相同于JDK7早年的HashMap<String,Object>,当有两个或以上的键被分派到哈希数组的统一个索引上时,会发生哈希斗嘴。Redis也行使链地点法来办理键斗嘴。即每个哈希表节点都有一个next指针,多个哈希表节点用next指针组成一个单项链表,链地点法就是将沟通hash值的工具组织成一个链表放在hash值对应的槽位。

Redis中的字典行使hashtable作为底层实现的话,每个字典会带有两个哈希表,一个平常行使,另一个仅在rehash(从头散列)时行使。跟着对哈希表的操纵,键会逐渐增多或镌汰。为了让哈希表的负载因子维持在一个公道范畴内,Redis会对哈希表的巨细举办扩展或紧缩(rehash),也就是将ht【0】内里全部的键值对分多次、渐进式的rehash到ht【1】里。

六、Set

Set荟萃工具的底层实现可所以intset(整数荟萃)可能hashtable(字典可能也叫哈希表)。

Redis为何这么快——数据存储角度

intset(整数荟萃)当一个荟萃只含有整数,而且元素不多时会行使intset(整数荟萃)作为Set荟萃工具的底层实现。

  1. typedef struct intset {  
  2.  // 编码方法  
  3.  uint32_t encoding;  
  4.  // 荟萃包括的元素数目  
  5.  uint32_t length;  
  6.  // 生涯元素的数组  
  7.  int8_t contents[];  
  8. } intset; 
  •  sadd:intsetAdd---O(1)
  •  smembers:intsetGetO(1)---O(N)
  •  srem:intsetRemove---O(N)
  •  slen:intsetlen ---O(1)

(编辑:湖南网)

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

热点阅读