thinkphp5实例:快读!高速redis数据缓存
2022-05-28Redis
Redis 最简单的用法就是直接存储字符串,Redis 写入和读取性能远高于 MySQL。所以我们经常使用 Redis 作为缓存层为 MySQL 数据库保驾护航。下面为大家带来实例,详细讲解thinkphp5控制缓存代码
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
控制缓存的创建和更新。
本文示例直接使用字符串来存储缓存,实际项目中更多的是使用哈希或者列表来实现。
很赞哦! ()