rdb 文件是一个经过压缩的二进制文件,是 redis 持久化方式之一。本章主要讲 rdb 应用场景。
Linux 文件权限属性,比较基础的知识,在这记录一下。
人生有多少个十年,总结是人生一个阶段的复盘。一首 《平凡之路》送给平凡的自己:——我曾经跨过山和大海,也穿过人山人海,我曾经拥有着的一切…😇
LRU(Least recently used,最近最少使用),数据插入队列中,经常访问的数据单元靠近列表头部,不经常访问的靠近列表尾部。列表数据就像按照时间排序一样。常用来淘汰一些长时间不使用的数据。
在多线程模型中,锁是个复杂的东西,即便老司机有时也会翻车。
锁是配对出现的。锁上了,就要解锁,忘记解锁会产生死锁,一般这种低级错误很容易避免,然而在复杂的业务体系中,往往会产生嵌套式死锁问题,而这种问题有时藏得很深。
redis 是内存数据库,可以通过 redis.conf
配置 maxmemory
,限制 redis 内存使用量。当 redis 主库内存超出限制时,命令处理将会触发数据淘汰机制,淘汰(key-value
)数据,直至当前内存使用量小于限制阈值。
前些时间,朋友问了一些问题:
printf
是线程安全的吗?printf
的 %s
格式输出,如果参数是其它类型的数据强制转换为 char*
的,结果会怎么样?Linux 是开源的,何不查看源码理解程序工作原理呢?我们也可以通过 gdb 调试手段(glibc / kernel)去深入理解源码的实现。
redis 可能存在大量过期数据,一次性遍历检查不太现实。
redis 有丰富的数据结构,key-value
, value
数据结构对象(redisObj)可能存储大量数据,key
过期了,value
也不建议在进程中实时回收。
为了保证系统高性能,每次处理一点点,逐渐完成大任务,“分而治之” 这是 redis 处理大任务的一贯作风。
系统通过虚拟内存方式管理进程内存,我们测试一下程序中的变量分别分布在虚拟内存哪些区域。
自从使用 markdown
写文档后,感觉已经离不开它了。工作这么久,遗憾没有条理化地将知识落地,做了大量重复劳动。幸运 github 提供了一个很好的源码管理和博客平台,我们可以通过 git + github + jekyll
+ vscode 等工具管理自己的博客内容。
目前国内网络对 github 平台不是很友好,如有条件,可以部署博客到云主机上。
[我的博客] [框架] 来自 Gaohaoyang。
通过 gdb 查看程序的汇编代码,理解宏函数和函数的工作原理。
通过测试 demo,测试最大值实现,宏函数和函数逻辑基本相同,不同的地方在于:
内存池,要在大块连续内存上,分配小块内存,指向小内存块的地址是否对齐,对系统性能有一定影响:因为 cpu 从主存上读取数据相对较慢,合理的地址对齐可以减少访问次数,提高访问效率。
数据 ==> 磁盘/网络存储 -> 主存 -> cache(L1 - L3) -> 寄存器 -> cpu
redis 数据(key-value
),value
往往是对象的形式存在(redisObject
)。
整数集合,是一个有序的数值数组对象,存储的数值不允许重复。源码在 intset.c
张铁蕾的博客将 skiplist
原理和算法复杂度描述得很清楚,具体可以参考。我分享一下自己对部分源码的阅读情况和思考。