不言不语

您现在的位置是: 首页 >  数据库  >  Redis

Redis

thinkphp5实例:快读!高速redis数据缓存

2022-05-28Redis
Redis 最简单的用法就是直接存储字符串,Redis 写入和读取性能远高于 MySQL。所以我们经常使用 Redis 作为缓存层为 MySQL 数据库保驾护航。下面为大家带来实例,详细讲解thinkphp5控制缓存代码


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 控制缓存的创建和更新。

本文示例直接使用字符串来存储缓存,实际项目中更多的是使用哈希或者列表来实现。


文章评论