用TP框架咋快速搞定Redis信息,省事又方便你试试
- 问答
- 2025-12-26 08:43:19
- 2
行,直接用ThinkPHP搞Redis,确实有那种“省事又方便”的路子,你别看Redis听起来像个高大上的东西,在TP框架里,它其实就是个藏在后台的“万能小本本”,你往里存东西、取东西,比操作数据库简单多了,咱不扯那些复杂的概念,就说说怎么快速上手,把活儿干完。
第一步:先把Redis这个“工具”拿到手
ThinkPHP框架自己不带Redis,但它提供了一个超级好用的门面(就是个快捷方式)叫Cache,你得先确保你服务器上已经安装了Redis服务,就像你要用微波炉,得先插上电一样,在你的项目里,通过Composer安装Redis的PHP扩展,打开命令行,到你项目的根目录,输入:composer require topthink/think-redis,这个命令就是从ThinkPHP的官方GitHub仓库(来源:ThinkPHP官方GitHub仓库)把连接Redis的驱动拉下来,等它噼里啪啦执行完,工具就算备好了。
第二步:告诉TP框架:“喂,我要用Redis了!”
光有工具还不行,你得告诉框架怎么用,这个配置写在项目的 config 目录下的 cache.php 文件里,你用编辑器打开这个文件,会看到里面已经有了一些设置,你需要关注的是 default 和 stores 部分。
找到 stores 数组,里面应该已经有一个叫 redis 的配置项,如果没有,你就自己加一个,它大概长这样:
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1', // 你Redis服务器的IP,本地就是127.0.0.1
'port' => 6379, // 端口,默认一般是6379
'password' => '', // 密码,如果你设了密码就填上,没设就是空字符串
'select' => 0, // 选择哪个数据库,Redis默认有16个库,从0到15
'timeout' => 0, // 超时时间,0就是不超时
'persistent' => false, // 是否使用长连接
],
(来源:ThinkPHP官方文档关于缓存配置的说明)
你把 default 的值改成 redis,就像这样:'default' => 'redis',这意思就是,框架默认的缓存方式就使用Redis了,这下,框架就知道你要用它来当“小本本”了。
第三步:开搞!存、取、删、清空

配置好了,用起来就简单得跟喝水一样,ThinkPHP提供了一个叫 Cache 的助手函数(也叫门面),几个常用的方法就能搞定大部分需求。
-
存数据(Cache::set):这是最常用的,用户登录后,你把他的信息存到Redis里,设置个10分钟过期。
use think\facade\Cache; // 存一个简单的值 Cache::set('user_name', '张三', 600); // 键是user_name,值是张三,600秒后过期 // 存一个数组也行,框架会自动帮你序列化(就是转换成字符串存进去) $userInfo = ['id' => 1, 'name' => '李四', 'email' => 'lisi@example.com']; Cache::set('user_info_1', $userInfo, 3600); // 存一个小时这比你往数据库里插一条记录快多了,而且Redis读写速度极快。
-
取数据(Cache::get):存进去就是为了取出来用的。
$name = Cache::get('user_name'); if ($name) { echo "欢迎回来," . $name; } else { echo "用户信息不存在或已过期"; } $info = Cache::get('user_info_1'); if ($info) { // $info 直接就是数组,可以直接用 echo $info['email']; } -
删数据(Cache::delete):比如用户修改了信息,或者注销登录了,你就得把旧数据清掉。

// 删除单个 Cache::delete('user_name'); // 删除多个,传数组 Cache::delete(['user_name', 'user_info_1']); -
清空所有缓存(Cache::clear):这个要小心用!一下就把Redis里这个数据库(就是你前面
select配置的那个)的所有用TP框架存的缓存都清空了,一般在项目大更新或者测试的时候用。Cache::clear();
-
其他好用的小功能:
- 记得住就取,记不住就存(Cache::remember):这个特别省事,比如你要查一个复杂的排行榜数据,计算起来很耗时间,你可以用这个方法,它先看看Redis里有没有这个排行榜,如果有就直接返回;如果没有,就去执行你写的那个复杂的计算函数,然后把结果存到Redis里,再返回给你,一举两得。
$hotList = Cache::remember('hot_post_list', function(){ // 这里是模拟一个很耗时的数据库查询 return Db::name('post')->order('views', 'desc')->limit(10)->select(); }, 3600); // 缓存一小时 - 判断存不存在(Cache::has):有时候你想先判断一下再决定干嘛。
if (Cache::has('user_token')) { // 执行某些操作 }
- 记得住就取,记不住就存(Cache::remember):这个特别省事,比如你要查一个复杂的排行榜数据,计算起来很耗时间,你可以用这个方法,它先看看Redis里有没有这个排行榜,如果有就直接返回;如果没有,就去执行你写的那个复杂的计算函数,然后把结果存到Redis里,再返回给你,一举两得。
啥时候用这个“小本本”最划算?
你别什么都往Redis里塞,它虽然快,但内存是有限的,下面这些场景用起来特别爽:
- 会话管理(Session):用户登录状态存Redis,比存文件或数据库快得多,尤其是在集群部署时,所有服务器都能读到同一个Session。
- 频繁访问但又不常变的数据:比如网站的分类列表、配置项、热门文章榜,从数据库查一次扔Redis里,后面全从Redis读,数据库压力瞬间小很多。
- 缓存查询结果:就像上面
remember的例子,复杂的SQL查询结果缓存一下,页面打开速度嗖嗖的。 - 简单的队列:虽然专业的队列用RabbitMQ、Kafka更好,但如果需求不复杂,比如只是发个邮件通知,可以用Redis的列表结构简单实现个队列,TP框架也支持。
最后提醒一句
用完Redis,别忘了它是在内存里的,所以你重启Redis服务,或者服务器断电,里面的数据就全没了(除非你配置了持久化),它叫“缓存”,意思是“丢了也能从数据库再来的数据”,千万别把最重要的、绝对不能丢的核心数据只放在Redis里。
在ThinkPHP里用Redis,你就把它当成一个速度超快的、简单的键值对字典来用。Cache::set 和 Cache::get 这两个方法能解决你80%的问题,remember 方法能再帮你省掉不少判断代码,这样一套组合拳打下来,搞点缓存提升性能,确实省事又方便,你试试,就知道有多爽了。
本文由瞿欣合于2025-12-26发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/68690.html
