美文网首页
Redis 学习笔记

Redis 学习笔记

作者: xzing | 来源:发表于2018-08-05 01:16 被阅读16次

这里只会记录在学习 Redis 源码时觉得比较好玩的地方,不会一五一十的讲细节。

内存分配

zmalloc 在实际 malloc 到的内存前面加一个 size

void *zmalloc(size_t size) {
    void *ptr = malloc(size+PREFIX_SIZE);
    *((size_t*)ptr) = size;
    update_zmalloc_stat_alloc(size+PREFIX_SIZE);
    return (char*)ptr+PREFIX_SIZE;
}

动态字符串 sds

sds 在基础的 char* 前面加一段 header 来记录信息(类似于 Go 实现)。

// 除了 sdshdr64,还有 sdshdr32、sdshdr16... 区分不同的长度上限
struct __attribute__ ((__packed__)) sdshdr64 {
    uint64_t len; /* used */
    uint64_t alloc; /* excluding the header and null terminator */
    unsigned char flags; /* 3 lsb of type, 5 unused bits */
    char buf[];
};

sds sdsnewlen(const void *init, size_t initlen) {
    ...
    sh = s_malloc(hdrlen+initlen+1);
    s = (char*)sh+hdrlen;   // 实际字符串
    memcpy(s, init, initlen);
    return s;
}

字典 dict

  • 基本数据结构

    • dictEntry:键值对。(冲突处理:开链)
    • dictht:哈希表。记录使用情况用来 rehash
    • dict
      typedef struct dict {
          dictType *type; // 不同type有不同的hash算法
          void *privdata;
          dictht ht[2];   // 两个 ht 来实现渐进式的 rehash
          long rehashidx; /* rehashing not in progress if rehashidx == -1 */
          unsigned long iterators; /* number of iterators currently running */
      } dict;
      
  • 哈希算法

  • rehash:冲突元素太多时扩容。通过两个哈希表进行

    • 渐进式策略:
      • 每次执行操作时转移一个
      • 定时每次转移100个
  • 数据操作

    • 每次操作前尽可能进行一次 rehash
    • rehash 时,要依次在两个表里查询;其他操作类似。

跳跃表 zset

  • 数据结构
    • span

整数集合 intset

  • 数据结构
    • encoding 记录元素大小,对于小的数字,使用 int16_t 来节省内存。
  • resize
    • 先分配足够内存,再调用 memmove 函数进行搬移
    • 单向升级,只有在插入元素的时候,如果 encoding 过小时会进行

鸣谢

相关文章

  • 【Redis】Redis学习笔记(五)jedis(JedisCl

    redis系列文章目录 redis学习笔记(一)redis3.2.5集群安装与测试 redis学习笔记(二)Jed...

  • Redis学习笔记:事务

    Redis学习笔记:事务 原文链接:Redis学习笔记:事务 一、事务的描述 和MySQL一样,Redis中也有事...

  • Redis 参数

    Redis Redis 学习笔记 II 常见参数配置

  • 2018-11-12

    Redis学习笔记 Redis在在线测试 Redis官网 REmote DIctionary Server(Red...

  • Redis 初识

    初识 Redis 《 Redis 开发与运维》的学习笔记,希望大家多多指导。 什么是 Redis Redis 的全...

  • Redis—Redis入门安装及基础数据的知识

    Redis学习笔记所有文章:https://www.jianshu.com/nb/33547142 Redis安装...

  • 数据库Redis在Windows上的使用教程

    Redis学习笔记----Redis在windows上的安装配置和使用 Redis简介 redis是一个key-v...

  • Redis 学习笔记

    Redis 学习笔记 原文:硬核!16000 字 Redis 面试知识点总结,建议收藏! Redis 基础知识 R...

  • Redis 数据类型

    Redis Redis 学习笔记 II Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、...

  • Redis 安装

    Redis Redis 学习笔记 I Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可...

网友评论

      本文标题:Redis 学习笔记

      本文链接:https://www.haomeiwen.com/subject/qumvvftx.html