技术图谱
梳理一下技术栈掌握情况、未来技术规划等。
Redis 过期删除策略+缓存淘汰策略
Redis 过期删除策略在介绍 Redis 的过期删除机制之前,需要先说明:定时删除、惰性删除、定期删除是对过期数据清理思路的抽象划分,用于分析不同策略在 CPU 开销与内存占用之间的取舍。实际的高性能缓存系统通常不会采用其中某一种,而是进行组合设计。 常见的过期删除策略1. 定时删除定时删除指的是:当键到达过期时间的瞬间立即删除该键。 其实现通常需要: 为每一个设置了过期时间的 key 维护独立的定时事件(如定时器或最小堆) 到期后触发删除回调 优点: 过期键能够被及时清理 内存利用率高 缺点: 定时事件数量与过期 key 数量近似线性相关 当过期 key 较多时,定时回调会占用大量 CPU 严重影响主线程吞吐量 因此,Redis 并未采用这种高精度但高成本的策略。 2. 惰性删除惰性删除的核心思想是:不主动删除过期 key,仅在访问时检查其是否过期。 执行流程: 客户端访问 key Redis 判断 key 是否已过期 若已过期,立即删除并返回 key 不存在 优点: 对 CPU 非常友好 不做无意义的主动扫描 缺点: 如果某些 key...
Redis 使用实践
这一部分更多偏实践部分,理论部分见其余 Redis 相关博客
Redis 线程模型
Redis 线程模型Redis 常被描述为“单线程高性能”的代表,但单线程并不等于简单或低效。准确理解 Redis 的线程模型,需要区分:命令执行、网络 I/O、后台任务这三条路径。 Redis 的单线程指的是什么是指—— Redis 的命令执行路径(command execution)是单线程的。 具体来说: 所有客户端命令,统一在 主线程 中,按顺序完成:读取 → 解析 → 执行 → 返回结果 这意味着: 不需要加锁、命令天然具备原子性、数据结构实现可以极度简化 但是,Redis 并不是整个进程只有一个线程 基于内存的设计Redis 将所有核心数据结构存放在内存中,而不是磁盘。 这带来的不仅是“快”这么简单: 避免磁盘 I/O 阻塞 单次命令执行时间高度可控 延迟分布稳定,适合单线程顺序执行模型 相比之下,频繁访问磁盘的系统(如传统关系型数据库)更容易出现阻塞点,不适合纯单线程执行所有逻辑。 关于数据不丢失的问题Redis...
docker个人实践记录
记录了一些docker日常使用或具体实践的例子
JSON处理工具
JSON 处理工具 使用依赖 1234<dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId></dependency> 12import com.alibaba.fastjson2.JSON;import com.alibaba.fastjson2.JSONObject; 使用 JSONObject 和 JSON 即可
Redis 底层数据结构
Redis 底层数据结构 Redis 的高性能并非来自单一结构,而是通过多种针对场景高度定制的数据结构实现。上层五种数据类型(String / List / Hash / Set / ZSet)只是抽象接口,真正的性能边界由底层结构决定。 SDS(Simple Dynamic String) 基本原理 SDS 是 Redis 自定义的字符串实现,替代 C 原生 char*。其核心是显式维护字符串长度与剩余空间。 典型结构: 12345struct sdshdr { int len; // 已用长度 int alloc; // 分配总长度 char buf[];} 核心特点 O(1) 获取长度(避免 strlen) 支持二进制数据(不依赖 \0作为字符串的结尾) 预分配与惰性释放,减少内存重分配 避免缓冲区溢出 使用到的数据类型 String 所有 key Hash / List / Set / ZSet 内部元素 时间复杂度 获取长度:O(1) 追加:均摊 O(1) 修改:O(n) 链表(Linked...
Redis中Lua脚本的使用
Redis中Lua脚本的使用 参考资料:cnblogs.com、Redis Lua 脚本介绍 Redis 从 2.6 版本开始内置 Lua 脚本执行引擎,用于在服务器端组合多个 Redis 命令为一个原子操作,从而避免客户端多次往返网络、保证复杂逻辑的原子性执行。Lua 是一种轻量级、可嵌入的脚本语言,非常适合嵌入 Redis 这种高性能内存数据库中。 Lua 在 Redis 中执行时无需额外配置,只需通过命令将脚本发送到 Redis。脚本由 Redis Server 内的 Lua 5.1 解释器运行。Redis 脚本将命令组合在一起,避免多次网络往返,并在执行期间阻塞其他客户端命令,确保原子性。脚本执行结果可返回值给客户端。 Lua 脚本基本语法 Lua 语法简单,适合嵌入式脚本应用。基本数据类型包括:nil(空)、boolean(布尔值)、number(数字)、string(字符串)和 table(表)。table 是 Lua 的核心数据结构,它既可表现为数组也可表现为字典。 变量声明: 12name = 'example' --...
RedisTemplate & StringRedisTemplate 使用指南
RedisTemplate & StringRedisTemplate 使用指南 前言 由于对于 Redis 始终停留在理论阶段——懂数据结构类型、数据结构底层实现、缓存击穿、缓存穿透、缓存雪崩,还有各种防xxx的方案,但是貌似都停留在学习上、代码阅读上,现在重新补充一下代码实现的细节上。 项目中很多地方使用了 StringRedisTemplate,其实是继承自 RedisTemplate 的。 然后就去搜 RedisTemplate 的 API、搜如何使用,挑选了7-8篇博客结合 ai 整理知识点如下: 从导入依赖开始 为什么是从导入依赖开始呢?主要是这个过程引发了我的疑问: 看到有一篇博客使用如下pom依赖: 12345<!--Redis--><dependency> <groupId>org.springframework.boot</groupId> ...
nvm使用
nvm:Node 版本管理工具 nvm 是什么 nvm(Node Version Manager)是一款用于管理 Node.js 版本的工具。它允许在同一台机器上安装多个 Node 版本,并可随时切换。避免因不同项目依赖不同 Node 版本而导致冲突。 核心功能 安装多个 Node 版本 快速切换当前使用的版本 卸载不再需要的版本 隔离不同 Node 版本的全局包环境 简单原理 nvm 使用目录隔离不同 Node 版本,并在你切换版本时动态修改系统 PATH 指向对应版本。无需重新安装系统级 Node,也不会破坏现有项目。 Windows 平台的 nvm(nvm-windows) Windows 不支持官方 Linux nvm 工具,需要使用专门为 Windows 编写的版本: nvm-windows(又叫 nvm for Windows) 这是一个独立实现,与 Linux/macOS 的原版 nvm 不同,但功能一致。 Windows 安装步骤 卸载旧版 Node(若已安装) 以前直接从官网安装过 Node,需要先卸载: 控制面板 → 程序 → 卸载...






