Redis
文章平均质量分 88
本专栏主要记录有关redis底层结构和应用的相关知识
JCGKS
这个作者很懒,什么都没留下…
展开
-
redis7.2.2|SkipList源码解析,源码面前了无秘密
本篇文章基于redis7.22源码位置:redis-7.2.2\src\t_zset.c有关skiplist的介绍可以参考:skiplist文章目录ZsetzsetData_StructzskiplistFunctionzslCreateNodezslCreatezslFreeNodezslFreezslRandomLevelzslInsertzslDeleteNodezslDeletezslGetRankzslGetElementByRankzslUpdateScorezsetLengthzsetS原创 2024-03-05 12:42:31 · 972 阅读 · 0 评论 -
redis7.2.2|Dict
/根据ht_size_exp计算dictht_size//根据ht_size_exp计算dictht_size # define DICTHT_SIZE(exp)((exp) == - 1?0 :(unsigned long) 1 <<(exp)) //获取sizemask # define DICTHT_SIZE_MASK(exp)((exp) == - 1?//根据ht_size_exp计算dictht_size # define DICTHT_SIZE(exp)((exp) == - 1?原创 2024-03-01 15:25:05 · 1075 阅读 · 0 评论 -
从[redis:LinkedList]中学习链表
来看看都定义了哪些宏方法。//获取长度,由此可以看出对于OBJ_ENCODING_LINKEDLIST 编码方式的list来说,获取长度的时间复杂度为O(1)原创 2024-02-01 21:30:29 · 716 阅读 · 0 评论 -
Redis过期删除策略和内存淘汰策略
但是由于8个bit能表示的最大整数值有限为255,存储访问频次肯定不够用,所以这8个bit存储的是频次的对数值,并且这个值会随着时间衰减。由于redis的核心处理逻辑是单线程的,如果同一时间有过多的key同时过期就会导致主线程处理过期的key花费太多的时间,从而导致主线程阻塞可能无法执行线上的读写指令。惰性删除的策略是,不会主动删除过期的key,只有当客户端访问该key的时候,redis才从过期字典中获取key的过期时间进行判断,如果过期立即删除。10非常接近真实的LRU,但需要更多的CPU。原创 2024-01-22 19:53:43 · 1121 阅读 · 0 评论 -
开源节流--ziplist、listpack
ziplist是一种节省内存的数据结构,是旧版本中"list"、“hash”、“zset"的底层编码之一。由于ziplist存在一些问题,于是在新版本中用listpack代替ziplist。更具体地数据类型和底层编码的对应关系,可以参考文章"sds源码剖析先来分析一下"ziplist"和"listpack"的结构以及一些基本的操作,然后再分析"list"、“hash”、“set”、"zset"如何利用它节省内存的。//返回ziplist占用的总字节数。原创 2024-01-21 09:00:00 · 1034 阅读 · 0 评论 -
redis | set | intset竟然是按序存储整数值的
redis有一个数据类型"set",它的特性是"无序,不重复"。遇到一些需要去重的场景可以使用redis的"set"进行存储。它的底层实现有两种,一个是"intset整数集合"是一种比较节省内存的结构,另一个是"ht哈希表"。本篇文章先介绍"intset","ht"在之后的文章介绍。在读源码的过程中,发现在redis7.2.2版本中set的底层多了一种实现"listpack",我又去看了之前的版本发现之前的版本set的实现只有两种"intset"和"ht"。对于上一篇文章的出现的错误已改正。原创 2024-01-15 10:00:00 · 790 阅读 · 0 评论 -
从源码中分析SDS相较于C字符串的优势
从本篇文章开始会持续更新有关"redis数据结构源码"的分析。[分析的源码是redis7.2.2版本的,有时候会结合之前的版本]。由于能力有限,有些地方可能有些错误,还望指正。编码为embstr的字符串是无法被修改的字符串对于编码为embstr的字符串使用的sds结构为"sdshdr8"新创建的字符串的cap和len保持一致,并且字符的结尾含有’\0’结束符[猜想这里应该是为了兼容c中字符数组并且必要时候能够使用c的库函数]原创 2024-01-09 20:33:01 · 1068 阅读 · 0 评论 -
redis命令
NoSQL(not only sql)泛指非关系型数据库,不依赖业务逻辑方式存储,而以简单的key-value模式存储,大大增加了数据库的扩展能力。不遵循sql标准不支持ACID远超于sql的性能使用场景对数据高并发的读写海量数据的读写对数据的高扩展性不适用的场景需要事务支持基于sql化的结构查询,处理复杂的关系一些nosql数据库MemcacheRedisMongoDB列式数据库行式数据库。原创 2023-12-22 08:59:22 · 871 阅读 · 0 评论 -
熔断,降级,限流
熔断和降级都是自我保护的一种机制,但二者又有所不同。原创 2023-12-21 09:22:39 · 969 阅读 · 0 评论 -
限流方式、算法、策略、位置
限流虽然会导致部分用户的部分请求丢失,但是在更大程度上保证了系统的安全性和稳定性。以上四种算法针对的是单体框架的限流策略。对于分布式,微服务系统来说,可以借用一些中间件或者网关配置相应的限流策略。原创 2023-12-21 09:17:39 · 945 阅读 · 0 评论 -
hiredis的安装与使用
Hiredis 是一个用于 C 语言的轻量级、高性能的 Redis 客户端库。它提供了一组简单易用的 API,用于与 Redis 数据库进行交互。Hiredis 支持 Redis 的所有主要功能,包括字符串、哈希、列表、集合、有序集合等数据结构的读写操作,以及发布订阅、事务和管道等高级功能。Hiredis 设计简洁,代码轻量,且具有很高的性能。它被广泛用于开发需要与 Redis 数据库进行交互的 C 语言项目,可以帮助开发者轻松快捷地利用 Redis 的强大功能。原创 2023-08-27 20:33:31 · 673 阅读 · 0 评论