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

ThinkPHP5里怎么搞定Redis连接和基本操作,tp5用redis的那些事儿

在ThinkPHP5(简称TP5)里用Redis,其实就像是给你的应用请了一个速度超快的“临时工”,专门负责处理那些频繁、简单但又不想每次都麻烦数据库的活儿,下面我就把在TP5里怎么请这个“临时工”来干活儿的事儿说清楚。

先把Redis“请进门”:配置连接

你得告诉TP5,你要用Redis,并且Redis住在哪里,这个信息都写在项目的配置文件里,根据TP5官方手册(ThinkPHP5完全开发手册)的说明,配置文件通常是 application/config.php 或者更好的是在 application/database.php 里。

  1. 找对配置文件:推荐在 database.php 里配置,因为Redis也被看作是一种“数据库”,你打开这个文件,会看到一个叫 cache 的配置项,里面可以设置Redis。
  2. 填写连接信息:你需要告诉TP5以下几件事:
    • type: 驱动类型,这里固定写成 'redis'
    • host: Redis服务器的IP地址,如果就在你本机,写 0.0.1 就行。
    • port: Redis的端口号,默认是 6379
    • password: 如果你的Redis设置了密码,就在这里填上,没设置就留空 。
    • select: Redis有0-15一共16个数据库,默认用第0个,如果你想用别的,比如第1个,就写 1
    • timeout: 连接超时时间,单位是秒,一般设个15或30就行。

配置好的样子大概是这样(参考TP5官方文档中关于缓存配置的部分):

// application/database.php 文件中的一部分
'cache'          => [
    // 驱动方式
    'type'   => 'redis',
    // 服务器地址
    'host'       => '127.0.0.1',
    // 端口
    'port'       => 6379,
    // 密码
    'password'   => '',
    // 数据库号
    'select'     => 0,
    // 超时时间
    'timeout'    => 15,
],

这样,连接就配置好了,TP5在需要的时候,就会根据这个“地址簿”去找到并连接你的Redis服务。

让Redis开始“干活儿”:基本操作

配置好之后,你就可以在控制器(Controller)或者模型(Model)里使用Redis了,TP5通过一个叫 Cache 的类(门面类)来统一操作缓存,由于我们配置的驱动是Redis,所以这些操作自然就落到Redis头上了。

  1. 存数据(写操作)

    • 最简单的存Cache::set('名字', '值');Cache::set('user_name', '张三'); 就把“张三”这个值用“user_name”这个键存起来了。
    • 存的时候加个有效期:比如让这个数据30秒后自动消失 Cache::set('temp_data', '一些临时内容', 30);
    • 如果不存在才存Cache::set('lock', '1'); 是不管有没有都存,而 Cache::set('lock', '1'); 会先检查‘lock’存不存在,只有不存在的时候才存进去,这个在做一些防止重复的操作时很有用。
  2. 取数据(读操作)

    • 直接取$value = Cache::get('user_name');,这样就把刚才存的‘张三’取出来赋值给$value变量了。
    • 取不到给个默认值$value = Cache::get('不存在的键', '这是默认值'); 如果键不存在,就不会返回null,而是返回‘这是默认值’。
  3. 删数据(删操作)

    • 删除一个Cache::rm('user_name'); 就把‘user_name’这个键值对从Redis里删掉了。
    • 清空整个Redis数据库Cache::clear(); 这个要非常小心! 它会把你当前选的这个Redis数据库(比如刚才配置的select => 0)里的所有数据都删掉,只在测试或者明确需要时才用。
  4. 判断数据是否存在

    • $has = Cache::has('user_name'); 它会返回一个布尔值(true或false),告诉你这个键是否存在。
  5. 其他常见操作

    • 自增:常用于计数,比如文章阅读量。Cache::inc('read_count'); 会让‘read_count’的值加1,你还可以指定步长,比如一次加5:Cache::inc('score', 5);
    • 自减:和自增相反,Cache::dec('stock'); 让值减1。

有时候需要“直接对话”:使用原生Redis命令

虽然 Cache 类很方便,但它主要封装的是缓存相关的通用操作,有时候你需要用一些Redis更高级的命令,比如操作列表(list)、集合(set)、哈希(hash)等,这时候就需要直接调用Redis的原生方法。

TP5官方文档在“缓存”和“Redis驱动”章节提到,你可以通过以下方式获取到原生的Redis对象:

// 获取Redis对象
$redis = Cache::connect()->handler();
// 或者另一种方式(取决于TP5版本)
// $redis = Cache::store('cache驱动名')->handler();
// 然后你就可以像使用原生PHP Redis扩展一样来操作了
$redis->lPush('my_list', 'item1'); // 向左推入一个列表元素
$redis->hSet('my_hash', 'field1', 'value1'); // 设置一个哈希表的字段
$data = $redis->zRange('my_sorted_set', 0, -1); // 获取有序集合的所有成员

这个 $redis 对象就是PHP的Redis扩展实例,所有Redis支持的命令你基本都能用。

总结一下

在TP5里用Redis,三步走:首先是配置连接信息,告诉框架Redis在哪儿;然后是使用 Cache 类进行基本的缓存操作(set, get, rm等),这能满足大部分简单场景;最后如果不够用,就获取原生Redis对象进行高级操作,Redis再快,它也是和数据库不同的东西,一般用来缓存计算结果、会话管理、队列等,真正需要持久化、关系复杂的数据还是要靠MySQL这类数据库。

ThinkPHP5里怎么搞定Redis连接和基本操作,tp5用redis的那些事儿