
内存缓存
大约 3 分钟
这个文件是一个基于内存的缓存实现,为Rust应用程序提供了完整的内存缓存功能,作为Redis缓存的替代方案。
文件位置:memory.rs
核心数据结构
MemoryItem结构体
内存缓存项的基本单元,包含:
value
: 存储的字符串值expire_time
: 可选的过期时间戳created_at
: 创建时间戳
支持过期检查和TTL计算功能。
MemoryCache结构体
主要的缓存管理器,包含多种数据结构:
storage
: 字符串键值对存储(使用DashMap实现并发安全)namespace
: 命名空间支持lists
: 列表数据结构存储sets
: 集合数据结构存储sorted_sets
: 有序集合数据结构存储
主要功能模块
1. 生命周期管理
- 自动清理任务: 启动后台任务每分钟清理过期键
- 过期检查: 访问时自动检查并移除过期项
- 手动回收: 提供
recycling
方法主动清理过期数据
2. 基础字符串操作
set_string/get_string
: 基本的字符串存取操作set_string_ex
: 带过期时间的字符串设置get_one_use
: 一次性获取(获取后删除)
3. 序列化对象操作
set_value/get_value
: 支持任意可序列化对象的JSON存取set_value_ex
: 带过期时间的对象存储get_oneuse_value
: 一次性对象获取
4. 键管理功能
remove
: 删除指定键(支持多数据类型)contains_key
: 检查键是否存在(跨所有数据类型)ttl
: 获取键的剩余生存时间
5. 高级数据结构操作
- 有序集合操作:
zadd
,zrange
,zrangebyscore_limit
,zrem
,zadd_ch
- 集合操作:
sadd
(添加集合成员) - 列表操作:
lpush
(左侧推入),brpop
(右侧弹出,简化实现) - 原子操作:
set_nx_ex
(键不存在时设置)
6. 缓存查询和管理
get_all
: 获取所有缓存项get_all_paginated
: 分页查询缓存项,支持搜索过滤,跨多种数据类型
7. 命名空间管理
with_namespace
: 创建带新命名空间的缓存实例set_namespace
: 动态修改当前命名空间namespaced_key/namespaced_keys
: 键名命名空间转换工具
技术特点
并发安全: 使用DashMap提供无锁并发访问 自动过期: 基于时间戳的过期机制,支持后台自动清理 多数据类型: 模拟Redis的多种数据结构(字符串、列表、集合、有序集合) 内存高效: 纯内存实现,无需外部依赖 命名空间隔离: 支持多租户场景下的数据隔离 类型安全: 通过泛型和Serde确保序列化安全
与Redis实现的对比
这个内存缓存实现提供了与Redis缓存基本相同的API接口,可以作为Redis的内存替代方案。主要区别在于:
- 数据仅存储在进程内存中
- 不支持持久化
- 部分复杂操作(如阻塞式brpop)进行了简化
- 性能更高,但数据不具备持久性
这个实现为应用程序提供了一个功能完整、高性能的内存缓存解决方案。