缓存加Redis让TP框架跑得更快,性能提升真明显,试试看吧
- 问答
- 2025-12-23 12:01:14
- 1
最近在折腾一个用ThinkPHP(TP)框架开发的项目,刚开始访问量小还没啥感觉,后来用户慢慢多起来,就发现页面打开速度越来越慢,尤其是那些首页、商品列表页这种每个人都会点开看的页面,数据库的压力特别大,每次用户访问,TP框架都要去数据库里把数据查一遍,再组装成页面,搞得服务器CPU和数据库都嗷嗷叫,后来听一个朋友提到了用Redis做缓存,试了一下,效果真是立竿见影,页面打开速度“嗖”一下就上去了,下面我就把我怎么做的,用大白话分享一下,你要是也遇到同样的问题,真的可以试试看。
为啥要用Redis?它比文件缓存强在哪?
其实TP框架自己就带缓存功能,默认是文件缓存,就是把数据变成文件存在服务器的硬盘上,这招对付小网站还行,但人一多,问题就来了,你想啊,每次读缓存,服务器都得去硬盘里找那个文件,再读出来,硬盘读写速度跟内存比起来,那真是慢太多了,而且文件多了,管理起来也麻烦,找起来也慢。
Redis就不同了,它是个内存数据库,说白了,就是把数据直接放在服务器的内存里,内存的读写速度比硬盘快太多了,根本不是一个量级的,就像是你从桌子上拿一张纸(内存)和从一个大文件柜里翻找一个文件夹(硬盘)的区别,速度差老远了,用Redis做缓存,读取速度非常快,能极大地减轻数据库的压力。
我是怎么在TP框架里接上Redis的?
在TP框架里用Redis特别简单,根本不用大动干戈,TP已经帮我们封装好了,只需要改一下配置文件就行。
-
你得确保服务器上安装了Redis服务,这个就像安装MySQL数据库一样,需要先在服务器上装好Redis软件并启动它,这个步骤可以找运维同事帮忙,或者如果你用的是云服务器,很多服务商都提供一键安装。
-
修改TP项目的缓存配置文件,通常是
config/cache.php这个文件,找到它,把里面的配置改一改:// 默认缓存驱动改成redis 'default' => 'redis', // 配置redis连接参数 'stores' => [ // 其他缓存配置... 'redis' => [ 'type' => 'redis', // 类型就是redis 'host' => '127.0.0.1', // 你的Redis服务器IP,一般本机就是127.0.0.1 'port' => 6379, // Redis的端口,默认就是6379 'password' => '', // 如果你给Redis设置了密码,就填在这里,没设置就空着 'select' => 0, // 使用哪个Redis数据库,默认有16个,从0到15,一般用0就行 'timeout' => 0, // 连接超时时间 'persistent' => false, // 是否使用长连接 'prefix' => 'tp_', // 缓存键的前缀,加上以防和其他应用冲突 ], ],就这么简单,配置一下,TP框架就知道以后缓存数据要往Redis里存了。
具体怎么用?拿缓存文章列表举个栗子
光配置好还不行,关键是要在代码里用起来,我拿网站首页的文章列表举个例子,原来的代码可能是这样的:
public function index()
{
// 每次请求都直接去数据库查
$articleList = Db::name('article')->where('status', 1)->order('create_time', 'desc')->limit(10)->select();
return view('index', ['list' => $articleList]);
}
这种写法,每来一个用户访问首页,数据库就要执行一次查询,如果首页访问量很大,比如一分钟有几百个人访问,数据库就要被查询几百次,肯定慢。
用了Redis缓存之后,我把它改成了这样:
public function index()
{
// 先定义一个缓存的键名,唯一标识这份数据
$cacheKey = 'home_article_list';
// 尝试从Redis缓存中获取数据
$articleList = Cache::get($cacheKey);
// 如果缓存里没有数据(比如第一次访问,或者缓存过期了)
if (empty($articleList)) {
// 这才去数据库查询
$articleList = Db::name('article')->where('status', 1)->order('create_time', 'desc')->limit(10)->select();
// 把查询到的数据存入Redis缓存,设置过期时间为10分钟(600秒)
Cache::set($cacheKey, $articleList, 600);
}
// 返回数据给视图
return view('index', ['list' => $articleList]);
}
你看,这么一改,逻辑就变了,第一个用户访问的时候,缓存里是空的,所以会去数据库查,查完之后立刻把结果存到Redis里,在接下来的10分钟内,任何一个用户再来访问首页,代码直接从Redis内存里把数据拿出来返回,根本不用麻烦数据库了,只有等到10分钟缓存过期后,下一个用户访问时才会再次查询数据库并更新缓存。
用了之后效果怎么样?
效果非常明显!最直接的感受就是页面加载速度快了很多,原来首页完全打开可能要一两秒,用了Redis之后,基本上都是毫秒级响应,一点就开,服务器的CPU使用率和数据库的负载也肉眼可见地降下来了,因为绝大部分请求都被缓存拦截住了,数据库终于可以“喘口气”了。
需要注意的几个小地方
用缓存也不是一劳永逸的,有几个小问题要注意:
- 数据一致性问题:比如后台管理员更新了一篇文章,但前台缓存还是旧的数据,要等10分钟后过期了才会显示新的,解决办法是,在后台更新文章的时候,手动把
'home_article_list'这个缓存删除掉(用Cache::delete($cacheKey)),这样下次访问时自然就会重新加载最新数据。 - 缓存别乱用:不是所有数据都适合缓存,像一些实时性要求非常高的数据,比如用户余额、股票价格,或者一些很少被访问的冷门数据,就不太适合缓存。
- 内存别撑爆:Redis是内存数据库,服务器内存是有限的,不能无限制地往里存数据,要注意给缓存设置合理的过期时间,让不常用的数据自动失效,对于可能增长很快的数据(比如用户行为日志),一般也不适合用Redis缓存。
对于TP框架开发的网站来说,如果遇到性能瓶颈,尤其是数据库读取压力大的情况,用Redis做缓存是一个非常直接、有效且成本较低的优化手段,配置简单,效果显著,真心推荐你试试看,说不定会有惊喜!

本文由革姣丽于2025-12-23发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://www.haoid.cn/wenda/66898.html
