企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Redis 最简单的用法就是直接存储字符串,Redis 写入和读取性能远高于 MySQL。所以我们经常使用 Redis 作为缓存层为 MySQL 数据库保驾护航。 ![](https://box.kancloud.cn/db37547f8b271a76dad552992d00cfdd_532x388.jpg) > Cache 方法默认使用的是文件缓存,需要自行去 config.php 配置文件中修改缓存存储方式 ## 修改配置文件 默认配置\[文件缓存\] ~~~ 'cache' => [ // 驱动方式 'type' => 'File', // 缓存保存目录 'path' => CACHE_PATH, // 缓存前缀 'prefix' => '', // 缓存有效期 0表示永久缓存 'expire' => 0, ], ~~~ Redis 缓存配置 ~~~ 'cache' => [ // 驱动方式 'type' => 'Redis', // 缓存前缀 'prefix' => '', // 缓存有效期 0表示永久缓存 'expire' => 0, // redis 主机 'host' => '127.0.0.1', // redis 端口 'port' => 6379, // redis 密码 'password' => '', ], ~~~ 建议不使用缓存前缀,避免浪费内存空间。如果同一台服务器上的 Redis 实例同时存储多个项目的缓存,建议启动多个 Redis 实例,每个实例使用不同端口,存储不同项目的数据,避免操作阻塞影响其他项目的读取时间。 ## 使用 ThinkPHP5 Cache类控制缓存代码 ~~~ public function getUserData($user_id) { if (!$data = Cache::get("user:{$user_id}")) { $data = Db::name('user')->where('id', $user_id)->find(); Cache::set('user:{$user_id}', $data); } return $data; } ~~~ ## 使用 PHP Redis 控制缓存代码 ~~~ public function getUserData($user_id) { $redis = $this->redis; if (!$data = $redis->get("user:{$user_id}")) { $data = Db::name('user')->where('id', $user_id)->find(); $redis->set('user:{$user_id}', $data); } return $data; } ~~~ 首先查询缓存是否存在,如果存在直接返回缓存内容。不存在的话,取数据库读取内容后存入缓存中,下次就会直接从缓存中读取内容。 如果项目只是存储在 Redis 中,减轻 MySQL 压力。建议不要设置缓存时间,由手动控制更新缓存。 示例为查询时建立缓存,应该同时在创建数据和修改数据时也建立缓存。避免高并发下缓存没命中,导致流量瞬间进入 MySQL 查询。建议使用 ThinkPHP5 的模型事件`after_write`控制缓存的创建和更新。 本文示例直接使用字符串来存储缓存,实际项目中更多的是使用哈希或者列表来实现。