- 博客(16)
- 收藏
- 关注
原创 Redis中的过期策略与内存淘汰策略
本文介绍了Redis的过期策略与内存淘汰机制。Redis提供EXPIRE、PEXPIRE等4种命令设置键过期时间,并通过过期字典管理过期键。其采用惰性删除(访问时检查)和定期删除(随机抽查)相结合的过期键删除策略,平衡内存和CPU效率。在内存不足时,Redis提供多种淘汰策略,包括LRU(最近最少使用)、LFU(最不经常使用)等算法,其中allkeys-lru是常用策略。这些机制共同保障Redis的内存管理和高效运行。
2025-06-04 15:35:29
545
原创 Redis线程模型
Redis采用单线程模型主要是基于性能和维护性的考量:一方面,Redis作为内存数据库,CPU通常不是瓶颈,网络IO才是关键,单线程避免了线程切换开销;另一方面,单线程简化了数据结构的并发控制。
2025-06-03 15:43:23
925
原创 Redis底层数据结构之深入理解跳表(1)
本文详细介绍了Redis跳表(SkipList)的增删查操作实现原理。主要内容包括:1. 跳表初始化过程,随机指定层数并创建头尾节点;2. 添加元素时的层数随机扩展机制及插入逻辑;3. 搜索时从顶层开始逐层查找的流程;4. 删除操作需移除所有层对应节点的实现方法。
2025-06-01 15:49:16
442
原创 Redis底层数据结构之跳表(SkipList)
Redis有序集合ZSet采用跳表(SkipList)作为底层数据结构,通过多层索引实现高效查询。相比标准跳表,Redis优化为允许重复score并增加回退指针,支持双向遍历。
2025-05-31 15:39:19
1161
原创 Redis底层数据结构之字典(Dict)
Redis的Dict数据结构采用哈希表实现,通过两个dictht结构(ht[0]和ht[1])支持渐进式扩容机制。
2025-05-30 16:50:59
990
原创 Redis底层数据结构之快链表(QuickList)
本文介绍了Redis中的QuickList数据结构。QuickList是一种结合了双向链表和ZipList的混合结构,每个链表节点存储一个ZipList。
2025-05-29 15:45:25
923
原创 Redis底层数据结构之压缩链表(ZipList)
Redis的ZipList是一种为节省内存设计的紧凑双向链表结构。它支持O(1)时间复杂度的头尾操作,通过zlbytes、zltail、zllen等头部字段管理列表。Entry节点包含prevlen(前驱长度)、encoding(编码类型)和entry-data(实际数据),其中prevlen可能引发连锁更新问题。
2025-05-28 16:39:15
688
原创 Redis底层数据结构之动态字符串(SDS)
本文介绍了Redis底层数据结构SDS(Simple Dynamic String)的设计原理及其优势。SDS通过len、alloc等字段实现O(1)时间复杂度获取字符串长度、二进制安全、避免缓冲区溢出,并利用空间预分配和惰性空间释放优化性能。相比C语言原生字符串,SDS更适应Redis的高效需求,如频繁的字符串追加和长度计算。文章还探讨了SDS的空间分配规则及其潜在内存影响。
2025-05-27 20:56:08
763
原创 单片机模拟手机通讯录(含搜索联系人功能)
具体功能概括在前边模拟过短信接收装置的基础上,添加上了搜索功能,可以通过联系人的姓的大写首字母来进行联系人电话号码的搜索。按键类似于老式手机的按键:7(A B C) 8(D E F) 9(G H I) 储存键4(J K L) 5(M N O)6(P Q R)读取和显示键1(S T U) 2(V W X) 3(Y Z) 删除键上翻键 0 下翻键 空闲键(括号表示按下不同的次数对应不同的数字和字母)按键的时序是,通过串口发送
2021-06-17 12:10:22
768
原创 单片机制作“电子炸弹”(可实现安放与拆除功能)
灵感来源:一位室友非常喜欢打"CS GO",经常因残局对炸弹的安放或拆除成功而高兴地大喊大叫(手动滑稽),于是我萌生了一个有趣的想法,用单片机来模拟出一个没有伤害的电子炸弹。电子炸弹的具体功能:首先用LCD1602来模拟电子炸弹的显示屏,在刚开始时,上边显示“Dismantle Bomb!”、“remote 6!”的字样,然后安放炸弹的人在输入“0748”后炸弹开始倒计时,允许输入错误无数次,直到输入成功为止。炸弹最多坚持30s,1s减一次,剩余的时间显示在屏幕的右下角。30s到20s之间,每2s响
2021-06-13 20:01:17
3672
8
原创 单片机模拟手机屏幕亮度调节功能
概括:通过运用AD/DA转换芯片来输出电压控制LED灯的亮度,实现在较暗环境下LED灯亮度偏弱,在较亮环境下LED灯亮度偏强的效果。用到的核心模块为XPT2046芯片,通过PWM波的调控来实现上述效果。源代码:#include <reg52.h>#include <intrins.h>typedef unsigned int uint;typedef unsigned char uchar;#define CH0 0x94//光敏通道#define CH1 0xd
2021-06-13 18:48:35
852
原创 单片机模拟短信接收装置
产生:单片机能不能做出一些高级有好van的东西呢?答案当然是可以,这次用单片机模拟的短信接收装置个人感觉比较不错,所以就拿出来分享了。简介:使用的板子是"STC89C52",用到的核心模块是LCD1602和AT24C02模块,短信的输入和发送用到串口通信,矩阵键盘用来决定短信存储的位置和一系列对短信的操作。具体功能:使用串口发送字符串模拟短信内容的发送,之后通过LCD1602进行短信内容的显示模拟短信的接收,通过AT24C02实现短信的储存,删除,读取条数等功能。每条短信上限为32个字节,最多储存
2021-04-24 16:28:40
728
原创 51单片机实现密码锁(有掉电保护功能)
简介:所用单片机型号为"STC89C52",用到的模块有AT24C02、LCD1602、矩阵键盘和独立键盘、led灯和蜂鸣器。主要实现的功能:可以模拟日常生活中的密码锁,密码长度为8位,烧录成功后没有初始密码,需要先设置一个初始密码。初始密码设置成功后,通过再次输入设置的密码即可开锁。在掉电后重新上电,设置的密码不变。开锁成功后可进行密码的修改和对led灯的控制。具体的现象:烧录成功后,按下初始密码设置键,显示屏会出现"Set Password"的字样,在输入初始密码时,led灯会逐个亮起,表示输
2021-04-16 21:50:49
7582
5
原创 51单片机实现简易计算器
简介:使用的单片机型号为"STC89C52",使用的模块为独立键盘和矩阵键盘,LED,蜂鸣器,数码管这些较基础的模块。具体功能:可以实现两个数字的加减乘除运算(两个数字为整数,位数可调,区分正负),结果保留整数,区分正负。在输入错误时有删除键,可以一位一位的删除(比如输入34,按下删除键后就变为3)。数码管显示时,需要用到的点亮,不需要用到的没有被点亮(个人认为这样比较舒服~)。计算器的按键分布:7 8 9 +4 5 6 -1 2 3 *D 0 = ÷F T W R(D为删除键,F为关机
2021-04-14 14:46:53
9253
11
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人