avatar
Articles
223
Tags
48
Categories
46

Archives
Tags
Categories
随便起个名字吧
Search
Archives
Tags
Categories

随便起个名字吧

Redis设计与实现之基本数据结构(三)
Created2022-11-07|学习笔记Redis数据结构
跳跃表使用场景跳跃表在大多数时间内可以与平衡树媲美,而且跳跃表的设计要比平衡树简单,所以采用跳跃表。 在Redis中,使用跳跃表作为有序集合的底层实现。如果一个有序集合的元素数量比较多,或者有序集合的成员是比较长的字符串时,Redis会采用跳跃表来作为有序集合的底层实现。 具体设计123456789101112131415161718192021222324252627282930313233// 跳跃表结构体如下typedef struct zskiplist { // 跳跃表的头节点以及尾节点 struct skiplistNode *head, *tail; // 跳跃表节点数量 unsigned long length; // 跳跃表中节点最深节点的深度 int level; } zskiplist;// 跳跃表中每一个节点typedef struct skiplistNode { // 层 struct skiplistLevel { // 前进指针 ...
Redis设计与实现之基本数据结构(二)
Created2022-11-06|学习笔记Redis数据结构
字典具体结构字典又称符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构。 Redis字典使用哈希表作为底层实现,一个哈希表可以有多个哈希表节点,每一个哈希表节点保存了字典中的一个键值对。 12345678910111213141516171819202122232425262728293031C// 哈希表结构typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值,总是等于size - 1 unsigned long sizemask; // 该哈希表已有的节点数量 unsigned long used;} dictht;// 哈希表节点typedef struct dictEntry { // 键 void *key; // 值 union { void *val; ...
Redis设计之基本数据结构(一)
Created2022-11-05|学习笔记Redis数据结构
简单动态字符串SDS作用1、保存数据库中字符串的值 2、AOF中的缓冲区以及客户端状态中的缓冲区 具体结构代码1234567891011struct sdshdr { // 记录buf数组中已经使用字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];} 因为C语言的字符串在每次赋值前都需要申请空间,而且获取长度需要遍历整个字符串,所以Redis采用上述设计。 SDS的好处1、可以在O(1)的时间复杂度之内获取到字符串的长度。 2、杜绝缓冲区的溢出。 ​ SDS的API每次操作SDS时,会先检查SDS空间是否满足,如果不满足会将空间扩展至足够的大小,然后才执行实际的修改。 3、减少修改字符串时带来的内存分配的次数。在C语言中,每一次修改字符串都需要重新分配内存空间,而SDS采用空间预分配和惰性删除来减少分配次数 ​ 1)空间预分配:如果需要对SDS进行扩容,如果扩容后SDS的长度小于1mb ...
1…2223
avatar
Guo Junhao
Articles
223
Tags
48
Categories
46
My Project
Announcement
Time is on your side
Recent Post
netty连接websocket问题记录2024-05-20
Java中的NIO与I/O多路复用2024-03-20
MySQL的组提交2024-03-08
Condition实现原理2024-02-29
AQS的执行过程2024-02-28
Categories
  • Redis10
  • 个人心得11
    • Java3
      • 并发2
    • 场景分析3
    • 并发1
    • 源码分析3
    • 计算机网络1
Tags
应用层 垃圾回收 调优 微服务 分库分表 消息队列 Redis设计与实现 索引 数据一致性 集群 场景分析 Jvm 哨兵 事务 内存模型 锁 网络层 Redis Redis核心技术实战 MySQL45讲 Java并发编程实战 缓存一致性 分布式锁 虚拟化 Redis持久化 缓存失效 集合 缓冲区 连接池 redo log 设计模式 Spring 深入理解Java虚拟机 线程池 Stream 网络编程 并发 分布式 源码 文件系统
Archives
  • May 20241
  • March 20242
  • February 20242
  • January 20243
  • December 20236
  • November 202311
  • October 202316
  • September 202315
Info
Article :
223
UV :
PV :
Last Push :
©2020 - 2024 By Guo Junhao
Framework Hexo|Theme Butterfly
Search
Loading the Database