Skip to content

Viveksssss/cache_system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CacheSystem

一个轻量级、线程安全的 C++ 缓存系统,实现了 LRU、LFU、ARC 三种页面替换算法。

项目简介

这是一个C++缓存系统,专为学习和实际使用而设计。它实现了经典的缓存淘汰策略,并提供了线程安全保障,适合理解缓存系统的核心原理和高并发场景下的数据访问优化。

特点

特点 说明
三种淘汰策略 LRU、LFU、ARC,适配不同业务场景
线程安全 互斥锁 + 原子操作 + 分片技术
高并发优化 分片降低锁竞争,提升吞吐量
防缓存陷阱 实现穿透、击穿、雪崩的应对方案

三种淘汰策略

策略 核心思想 适用场景 时间复杂度 LRU 淘汰最近最久未使用的数据 热点数据访问,时间局部性强 O(1) LFU 淘汰访问频率最低的数据 高频数据保留,频率敏感场景 O(log n) ARC 自适应平衡 LRU 和 LFU 访问模式动态变化的场景 O(1)

测试

基础测试

❯ /home/vivek/Codes/Cpp/cache_system/cache_system

╔════════════════════════════════════════╗
║     ARC Cache 完整测试套件             ║
╚════════════════════════════════════════╝

=== 测试1: 基本操作 ===
✓ get(1) = one
✓ get(2) = two
✓ get(999) returns false
✓ optional get(3) = three
✓ optional get(888) returns nullopt
测试1通过 ✓

=== 测试2: 更新已存在的键 ===
✓ 初始值: version1
✓ 更新后: version2
✓ 再次更新: version3
测试2通过 ✓

=== 测试3: LRU驱逐(T1部分)===
✓ 填满缓存: 1,2,3
✓ 访问 key=1,成为最新
✓ key=2 被正确驱逐
✓ 缓存内容: 4,3,1 (按LRU顺序)
测试3通过 ✓

=== 测试4: LFU驱逐(T2部分)===
✓ key=1 访问2次,晋升到T2
✓ key=2 访问2次,晋升到T2
✓ key=3 访问2次,晋升到T2
✓ key=4 成功晋升,驱逐了频率最低的数据
测试4通过 ✓

=== 测试5: T1→T2晋升机制 ===
✓ 添加 key=1 到 T1
✓ 第1次访问,访问次数=1
✓ 第2次访问,访问次数=2
✓ 第3次访问,达到阈值,晋升到T2
✓ 晋升后数据仍可访问,值正确
✓ key=1 在T2中,未被T1的驱逐影响
测试5通过 ✓

=== 测试6: 晋升后无重复数据 ===
✓ key=1 晋升到T2
✓ 更新后的值正确: 200
✓ 多次访问后值仍然正确,没有重复导致的问题
测试6通过 ✓

=== 测试7: B1命中导致T1容量增加 ===
✓ 填满缓存: 1,2,3,4
✓ 插入5,驱逐1到B1
✓ key=1 不在缓存中(在B1中)
✓ 重新添加key=1,命中B1
✓ key=1 成功恢复,值为: A_new
测试7通过 ✓

=== 测试8: B2命中导致T2容量增加 ===
✓ key=1 晋升到T2
✓ T2已满: 1,2,3,4
✓ 添加5,驱逐了T2中的一个数据到B2
测试8通过 ✓

=== 测试9: 零容量缓存 ===
✓ 零容量缓存,put不生效
✓ get返回nullopt
测试9通过 ✓

=== 测试11: 不同数据类型 ===
✓ 字符串键,结构体值测试通过
✓ 临时对象作为键测试通过
测试11通过 ✓

=== 测试10: 压力测试 ===
✓ 执行 10000 次操作...
✓ 压力测试完成,无崩溃
测试10通过 ✓

=== 测试12: 并发安全 ===
✓ 10 个线程完成 10000 次操作
✓ 成功操作数: 5000
测试12通过 ✓

=== 测试13: 性能基准 ===
✓ 100000 次写入耗时: 130ms
  平均每次写入: 1.3μs
✓ 100000 次读取耗时: 23ms
  平均每次读取: 0.23μs
✓ 100000 次混合操作耗时: 80ms
测试13通过 ✓


╔════════════════════════════════════════╗
║        所有测试通过!✓                 ║
╚════════════════════════════════════════╝

命中率测试

快速使用

git clone https://github.com/Viveksssss/cache_system.git
cd cache_system
mkdir build && cd build
cmake ..
make

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors