![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库
文章平均质量分 63
梁永欣的博客
这个作者很懒,什么都没留下…
展开
-
redis源码剖析-内存淘汰
redis的内存淘汰策略一共有八种volatile-lru (1):从有过期时间的键中淘汰最近最少使用的volatile-lfu (258):从有过期时间的键中淘汰最不经常使用的volatile-ttl (512):根据过期时间,先淘汰快过期的volatile-random (768):从过期时间的键中随机淘汰allkeys-lru (1029):无论有没有过期时间,淘汰最近最少使用的allkeys-lfu (1286):无论有没有过期时间,淘汰最不经常使用的allkeys-ra原创 2021-02-03 18:44:33 · 122 阅读 · 0 评论 -
redis源码剖析-五种数据类型
string类型相关的命令 get set setnx setex psetex append strlenstring使用sds实现list类型相关命令 lpush rpush lpushx rpushx lpop rpop llen lrange等list是使用quicklist实现dict类型相关命令 hset hget hdel hlen hkeys hvalues等哈希有两种编码 一种是使用ziplist 另一种是使用dict默认使用ziplist...原创 2021-02-01 14:03:57 · 130 阅读 · 0 评论 -
redis源码剖析-dict
看一下redis的hash dick的定义typedef struct dictEntry { void *key; union { void *val; uint64_t u64; int64_t s64; double d; } v; struct dictEntry *next;} dictEntry;typedef struct dictType { uint64_t (*hashFu原创 2021-01-31 23:53:39 · 158 阅读 · 0 评论 -
redis源码剖析-skiplist
试想一个业务场景:游戏需要实现一个实时更新的排行榜应该如何实现首先想到使用有序的双端链表, 因为插入的时间复杂度为O(1) 但是定位的平均时间复杂度为O(N) 当频繁更新排行榜的时候效率比较低有没有一个结构 能够满足快速定位到相应的位置并插入?跳跃表就能满足这个需求跳跃表(skiplist)跳跃表的思想是给数据结点建立索引 从最高层索引根据关键字查找 如果当前结点<关键字 且下一节点>关键字 则降层继续从当前结点开始查找 一直到查找到结点 或 降到第0层算法平均复杂度...原创 2021-01-31 23:12:32 · 140 阅读 · 0 评论 -
redis源码剖析-quicklist
注:本人分析的源码是 redis-5.0.7-linux版本先看下quicklist的结构typedef struct quicklistNode { struct quicklistNode *prev; struct quicklistNode *next; unsigned char *zl; unsigned int sz; /* ziplist size in bytes */ unsigned int count : 16原创 2021-01-29 16:06:06 · 155 阅读 · 0 评论 -
redis源码剖析-intset
首先看下intset的定义typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[];} intset;encoding: 集合的元素使用的什么什么编码,有以下三种#define INTSET_ENC_INT16 (sizeof(int16_t))#define INTSET_ENC_INT32 (sizeof(int32_t))#define INTSET_ENC原创 2021-01-28 17:39:15 · 158 阅读 · 0 评论 -
redis源码剖析-ziplist
ziplist基本结构ziplist 的结构大概为ziplist->entry的结构大概为prev_length: 当前一个元素的大小小于254字节时,prev_length只占用一个字节,当前一个元素大小大于254时,prev_length占用5个字节,其中第一个字节固定是0xFF 后四个字节为前一个元素实际占用大小encoding:当元素是字符串时:当content长度不大于0x3f的时候用1个字节 当长度不大于0x3fff的时候用2字节 否则就用5个字节当元素是整数时:.原创 2021-01-28 17:04:38 · 199 阅读 · 0 评论 -
redis源码剖析-robj
robj(redisObject)看下源码中的定义:typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or * LFU data (least significant 8 bits frequency原创 2021-01-28 16:11:39 · 342 阅读 · 0 评论 -
reids源码剖析-sds
sds(simple dynamic string,简单动态字符串)在redis源码sds.h文件里定义了这个数据结构 typedef char *sds; sds其实就是一个字符串指针由于使用的场景不一样,所以redis定义了五个基础的数据结构 分别是 sdshdr5 sdshdr8 sdshdr16 sdshdr32 sdshdr64,看下源码是这么定义的typedef char *sds;/* Note: sdshdr5 is never used, we just acces...原创 2021-01-28 12:08:04 · 217 阅读 · 0 评论 -
什么是乐观锁,什么是悲观锁
推荐简书上一篇写得很好的文章https://www.jianshu.com/p/d2ac26ca6525原创 2020-08-05 12:23:19 · 97 阅读 · 0 评论