当前位置:首页 > 问答 > 正文

TP5里咋用Redis来做缓存,调用方法和步骤简单说说

先把环境准备好

你想用Redis,首先得确保你服务器上已经安装并运行了Redis服务,这个就跟用MySQL之前得先安装MySQL是一个道理,如果你用的是本地开发环境,比如PHPStudy之类的集成包,通常里面都自带Redis,你把它启动起来就行了,如果是云服务器,可能需要自己安装配置一下,确保Redis服务在跑着,这是基础。

是你的TP5项目,TP5框架本身已经内置了缓存功能,并且支持多种缓存方式,Redis是其中之一,所以理论上你不需要额外安装什么插件,直接用框架提供的能力就行。

第二步:配置连接信息

光有Redis服务还不行,你的TP5项目得知道怎么去连接这个Redis服务,这个连接信息写在配置文件里,TP5的缓存配置文件通常是 application/config.php 里的 cache 部分,或者有一个独立的 application/extra/cache.php 文件,推荐用后者,这样比较清晰。

你需要打开这个配置文件,找到 type 这个参数,把它改成 redis,光改类型还不够,还得告诉它Redis服务器在哪,所以还要配置 host(服务器地址,本地一般是127.0.0.1)、port(端口,默认是6379)、password(密码,如果你给Redis设了密码的话)、select(选择哪个Redis数据库,默认有0-15共16个,一般用0)这些信息。

配置完大概是这样子(以 cache.php 为例):

return [
    'type' => 'redis',
    'host' => '127.0.0.1',
    'port' => 6379,
    'password' => '', // 没密码就空着
    'select' => 0,
    'timeout' => 0, // 连接超时时间
    'persistent' => false, // 是否使用长连接
];

这样配置好之后,TP5就知道该去哪里找Redis了。

第三步:在代码里调用缓存方法

配置妥当,就可以在写业务代码的时候用了,TP5提供了一个叫 Cache 的助手函数,用起来非常方便,主要就是几个操作:存缓存、取缓存、删缓存。

  1. 存缓存(写): 使用 Cache::set('键名', '值', 有效期),你想把查询到的用户数据缓存起来,缓存10分钟。

    // 假设从数据库查出了一条用户数据
    $userData = Db::name('user')->find(1);
    // 把它存到Redis缓存里,键名是 'user_1',有效期600秒(10分钟)
    cache('user_1', $userData, 600);

    这里 cache() 函数就是 Cache::set 的快捷方式,键名你自己起,要唯一;值可以是数字、字符串、数组等等;有效期单位是秒。

  2. 取缓存(读): 使用 Cache::get('键名'),当需要用到这个数据时,先去缓存里找。

    // 尝试从缓存读取键名为 'user_1' 的数据
    $userInfo = cache('user_1');
    // 判断一下缓存是否存在
    if (empty($userInfo)) {
        // 如果缓存里没有,那就去数据库查
        $userInfo = Db::name('user')->find(1);
        // 并且把新查到的数据再设置到缓存里,方便下次用
        cache('user_1', $userInfo, 600);
    }
    // 这时候 $userInfo 就是可用的数据了,不管来自缓存还是数据库

    这个“先读缓存,没有再读数据库并写入缓存”的模式,是最常用的。

  3. 删缓存(删): 当数据发生变化时(比如用户修改了个人信息),为了保证缓存的数据是最新的,你需要把旧的缓存删掉。

    // 删除键名为 'user_1' 的缓存
    cache('user_1', null);

    这样下次再请求用户数据时,就会发现缓存没了,于是去数据库读取新的数据并重新创建缓存。

除了这三个基本操作,还有一些其他的常用方法,Cache::has('键名') 判断缓存是否存在;Cache::inc('键名') 给缓存的数字值增加1,常用于计数;Cache::clear() 清空所有缓存(慎用!)等等,具体可以查一下TP5的官方手册。

需要注意的几个小地方

  • 序列化:你存进Redis的数组或对象,TP5会自动帮你序列化(转换成字符串存储),取的时候再自动还原,所以你不用自己处理这个过程。
  • 键名冲突:给你的缓存键名起个好名字,最好有点规律,模块_控制器_操作_ID 这种形式,避免不同地方的同名数据互相覆盖。index_user_profile_1
  • 缓存失效时间:设多久合适要看业务,变化不频繁的可以设长点,比如一天;变化频繁的设短点,比如几分钟,或者在一些更新数据的地方主动删除缓存。
  • Redis扩展:确保你的PHP环境安装了Redis扩展,你可以在 phpinfo() 页面里搜一下看看有没有redis字样,没有的话需要安装一下。

在TP5里用Redis缓存就三步:配好连接信息、用 cache() 函数进行读写删操作、注意一下缓存的有效期和更新策略,整个过程其实就是在数据库前面加了一个更快的“临时仓库”,大部分时候先从这个临时仓库拿东西,拿不到再去数据库大本营取,从而让网站速度变快,多写几次就熟练了。

TP5里咋用Redis来做缓存,调用方法和步骤简单说说