在 Linux 中,“缓存生效”通常指系统如何利用缓存提高性能,以及你的程序/配置如何正确地使用缓存。可以从三个层面理解:系统缓存(Page Cache)、应用层缓存、如何让缓存真正起作用。
Linux 会自动把:
放进 内存中的 Page Cache。
下次再访问相同文件/数据,就直接从内存读取,不访问磁盘。
cat bigfile.txt
cat bigfile.txt # 第二次明显更快
第一次:磁盘 → 内存
第二次:内存 → 用户态(缓存命中)
free -h
关注:
buff/cacheavailablecat /proc/meminfo | grep -i cache
write()
→ Page Cache
→ 定时/条件触发
→ 磁盘
sysctl -a | grep dirty
常见参数:
dirty_ratio:内存占用比例触发写回dirty_background_ratio:后台写回dirty_expire_centisecs:数据最大存活时间⚠️ 断电可能丢数据(除非 fsync)
read(fd, buf, 1MB);
O_DIRECTopen("file", O_DIRECT);
❌ 绕过缓存(用于数据库等特殊场景)
mmapmmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
if cache.exists(key):
return cache.get(key)
else:
data = db.query()
cache.set(key, data, ttl=60)
✅ 缓存是否生效看:
❌ 文件每次都不同
❌ 随机小文件 + 内存不足
❌ 使用 O_DIRECT
❌ 频繁 posix_fadvise(DONTNEED)
❌ 程序重启 + 冷启动
echo 3 > /proc/sys/vm/drop_caches
vmtouch -t bigfile
Linux 缓存默认就生效,只要你“重复访问相同数据”,且“不刻意绕过它”。
如果你指的是:
可以告诉我具体场景,我可以直接帮你定位。