读<<Redis设计与实现>>与redis(5.0)源码__对象
redisObject
1 |
typedef struct redisObject { |
1 |
typedef struct redisObject { |
前缀 c=ctrl, m=meta, a=alt,大写+shift
当前页的操作
结构定义在
server.h文件
方法实现在t_zset.c文件(ziplist是压缩)
zskiplistNode
1 |
typedef struct zskiplistNode { |
zskiplist
1 |
typedef struct zskiplist { |
union里面多了double类型d
1 |
typedef struct dictEntry { |
1 |
typedef struct dict { |
迭代器,大多用在rdb,aof,cluster场景中
有safe的差异
1
2
3
4
5
6
7
8 typedef struct dictIterator {
dict *d;
long index;
int table, safe;
dictEntry *entry, *nextEntry;
/* unsafe iterator fingerprint for misuse detection. */
long long fingerprint; // 在非安全模式模式下,迭代的时候生成一个指纹,在后续再次处理相应键的时候,对比指纹是否一致,判断键值是否被修改
} dictIterator;
不是单一的
sdshdr结构,而是分了sdshdr5,sdshdr8,sdshdr16,sdshdr32,sdshdr64几种.鉴于对__attribute__的浅陋理解,是对某种结构属性的定义,也就是说可以当作同一个结构,然后在不同的场景,赋予了不同的结构属性.然后主要用flags的前三位(5种类型)来判断使用的是那种属性结构
1 |
// 这个不存在使用场景,只是给出理论上的属性结构 |
1 |
type cpuProfile struct { |
1 |
// Invariants: |
翻译一下:
定式:
在无缓冲通道,除非send和rece都在单线程下阻塞, c.sendq和c.recvq至少有一个是空的,而且c.sendq和c.recvq的长度只受select语法限制