s函数是thinkphp 5中通过单一函数s()实现缓存存取删的快捷操作,需先显式初始化驱动(如file或redis),键名应带业务前缀避免冲突,file驱动删除不清理磁盘文件需手动清空。

S 函数是 ThinkPHP 5 中最常用的快捷缓存操作函数,底层调用的是配置好的缓存驱动(如 File、Redis),但使用前必须确保缓存已正确初始化,否则会静默失败或返回 null/false。
基础用法:存、取、删
三种核心操作都通过 S() 一个函数完成,靠参数组合区分:
- 写入缓存:S('user_100', $data, 3600) —— 以 user_100 为键,缓存 $data 3600 秒(1 小时)
- 读取缓存:$data = S('user_100') —— 成功返回缓存值,无缓存则返回 false
- 删除缓存:S('user_100', null) —— 第二个参数传 null 即删除该键
缓存初始化不能省略
TP5 默认不启用缓存,S() 不会自动加载 config/cache.php。若未初始化就调用 S('key', $val),它会尝试用默认 File 驱动,但因路径或权限问题常静默失败。
- 推荐显式初始化一次(例如在应用公共文件或入口处):
S(['type' => 'File', 'path' => RUNTIME_PATH . 'cache/']) - 若用 Redis:
S(['type' => 'redis', 'host' => '127.0.0.1', 'port' => 6379]) - 初始化后,后续所有 S() 调用都复用该驱动,无需重复配置
键名设计要带业务前缀
避免不同模块共用相同键导致覆盖,比如用户中心和后台都用 S('list'),数据会互相污染。
- 好习惯:S('user_list_recent', $data, 600)
- 更稳妥:S('admin:menu_tree', $tree, 1800)
- 不要依赖自动生成的 MD5 键(如不指定键名时 S($data) 的行为),不可控且难排查
注意 File 驱动的物理清理问题
S() 删除只是逻辑清除,对 File 驱动不会真正删磁盘文件,长期运行会导致 runtime/cache 下堆积大量无效文件。
- 开发阶段建议用命令行清空:
php think clear --cache - 手动清理需递归删除整个 runtime/cache 目录(含子目录如 7d/7d8a)
- Redis 驱动下 S('key', null) 会真实删除对应 key,无需额外操作
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











