加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2018-11-02 15:24:33 所属栏目:MySql教程 来源:JAVA高级程序员
导读:副标题#e# 【新产品上线啦】51CTO播客,随时随地,碎片化学习 本文内容思维导图如下: 一、简介和应用 Redis是一个由ANSI C语言编写,性能优秀、支持网络、可持久化的K-K内存数据库,并提供多种语言的API。它常用的类型主要是 String、List、Hash、Set、ZSe

ZSet有序集合对象底层实现可以是ziplist(压缩列表)或者skiplist(跳跃表)。

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

当一个有序集合的元素数量比较多或者成员是比较长的字符串时,Redis就使用skiplist(跳跃表)作为ZSet对象的底层实现。

  1. typedef struct zskiplist {  
  2.  // 表头节点和表尾节点  
  3.  struct zskiplistNode *header, *tail;  
  4.  // 表中节点的数量  
  5.  unsigned long length;  
  6.  // 表中层数最大的节点的层数  
  7.  int level;  
  8.  } zskiplist;  
  9. typedef struct zskiplistNode {  
  10.  // 成员对象  
  11.  robj *obj;  
  12.  // 分值  
  13.  double score;  
  14.  // 后退指针  
  15.  struct zskiplistNode *backward;  
  16.  // 层  
  17.  struct zskiplistLevel {  
  18.  // 前进指针  
  19.  struct zskiplistNode *forward;  
  20.  // 跨度---前进指针所指向节点与当前节点的距离  
  21.  unsigned int span;  
  22.  } level[];  
  23. } zskiplistNode; 

zadd---zslinsert---平均O(logN), 最坏O(N)

zrem---zsldelete---平均O(logN), 最坏O(N)

zrank--zslGetRank---平均O(logN), 最坏O(N)

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

skiplist的查找时间复杂度是LogN,可以和平衡二叉树相当,但实现起来又比它简单。跳跃表(skiplist)是一种有序数据结构,它通过在某个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。

【编辑推荐】

  1. 如何使用Redis构建轻量级微服务
  2. 如何使用Redis做MySQL的缓存
  3. Redis如何分析慢查询操作?
  4. 读完这篇文章,就基本搞定了Redis数据库
  5. Redis常见的几种使用方式解决方案总结
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:云计算网_泰州站长网)

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

热点阅读