T-DOC
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • 前言

    • 关于 Yii
    • 从 Yii 1.1 升级
    • Yii 2.0 升级说明
    • 贡献者指引
    • 捐献和赞助
  • 版本管理

    • 发行说明
    • 版本说明
    • 更新记录
  • 快速入门

    • 安装 Yii
    • 目录结构
    • 部署
    • Hello world
    • 使用表单
    • 使用数据库
    • 使用 Gii 生成代码
    • 编辑器与 IDE
  • 核心架构

    • 请求生命周期
    • 单一入口
    • 应用主体
    • 组件
    • 属性
    • 事件
    • 行为
    • 配置
    • 别名
    • 类自动加载
    • 服务定位器
    • 依赖注入容器
  • 高级应用模板

    • 安装
    • 框架结构
    • 运行测试
    • 环境与配置
    • 自定义应用模板
  • 基础功能

    • 路由
    • 控制器
    • 过滤器
    • 请求
    • 响应
    • 模型
    • 视图
    • 模块
    • 小部件
    • 前端资源
    • 扩展
    • Sessions 和 Cookies
    • 错误处理
    • 日志
  • 数据库

    • 数据库访问对象(DAO)
    • 查询构造器
    • 活动记录
    • 数据库迁移
    • Redis
    • Sphinx
    • Elasticsearch
    • MongoDB
  • 安全

    • 认证
    • 授权
    • 加密
    • Email 认证
    • 验证码
    • 社会化登录
    • 密码
  • 进阶功能

    • 缓存
    • 发送邮件
    • HTTP 客户端
    • 国际化
    • 队列
    • 控制台应用
    • 助手类
    • 验证器
  • RESTful Web 服务

    • 快速入门
    • 资源
    • 控制器
    • 路由
    • 格式化响应
    • 认证
    • 速率限制(限流)
    • 版本化
    • 错误处理
  • 开发工具

    • 调试工具栏和调试器
    • 使用 Gii 生成代码

Redis

Yii2 框架的官方 yii2-redis 扩展为我们提供了 redis 键值(key-value)存储的支持,也包含了一个 Cache 和 Session 存储处理器,并且实现了 ActiveRecord 模式,允许你在 redis 中存储活动记录等各种功能。

安装

redis >= 2.6.12 版本,这个是该扩展所有部件正常工作所必需的条件。

安装此扩展的首选方式是通过 composer,命令如下:

composer require yiisoft/yii2-redis

或者在 composer.json 文件中的 require 部分增加以下内容:

"yiisoft/yii2-redis": "~2.0.0"

然后执行 composer install 命令即可。

应用组件配置

使用此扩展时,需要在你的应用程序配置中配置 yii\redis\Connection 类:

return [
    //....
    'components' => [
        'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 0,
            'username' => null, // 用户名
            'password' => null, // 密码

            // 当连接失败时,应该重试命令执行的次数
            // 要求 yiisoft/yii2-redis >=2.0.7
            'retries' => 1,
            // ...
        ],
    ]
];

活动记录的使用

对于如何使用 Yii 的活动记录一般信息请参阅 指南。

定义一个 redis 活动记录类,你的记录类需要继承自 yii\redis\ActiveRecord 并且至少实现 attributes() 方法来定义记录的属性。一个没有指定默认值,默认为 id 的主键可以通过 [[yii\redis\ActiveRecord::primaryKey()]] 定义。主键是属性中必要的一部分,所以请确保你有一个 id 属性定义的,如果你没有指定自己的主键。

以下是一个 Customer 的实例模型:

class Customer extends \yii\redis\ActiveRecord
{
    /**
     * @return array 此记录的属性列表
     */
    public function attributes()
    {
        return ['id', 'name', 'address', 'registration_date'];
    }

    /**
     * @return ActiveQuery 定义一个关联到 Order 的记录(可以在其它数据库中,例如 elasticsearch 或者 sql)
     */
    public function getOrders()
    {
        return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }

    public static function find()
    {
        return new CustomerQuery(get_called_class());
    }
}

class CustomerQuery extends \yii\redis\ActiveQuery
{
    /**
     * 定义一个修改 `$query` 的范围返回有效(status = 1)的客户。
     */
    public function active()
    {
        return $this->andWhere(['status' => 1]);
    }
}

redis 活动记录的一般用法和数据库活动记录非常相似,正如 指南 中所描述的。它支持相同的界面和功能,除了以下限制:

  • 由于 redis 不支持 SQL 查询,因此查询 API 仅限于以下方法: where(),limit(),offset(),orderBy() 和 indexBy()。(orderBy() 尚未实现:#1305)
  • 由于 redis 中没有表,因此无法通过 via 表来定义关系。你只能通过其他记录来定义关系。

另外,也可以定义从 redis 的活动记录到普通的活动记录的关系,反之亦然。

使用实例:

$customer = new Customer();
$customer->attributes = ['name' => 'test'];
$customer->save();
echo $customer->id; // 如果没有明确设置 id 会自动递增

$customer = Customer::find()->where(['name' => 'test'])->one(); // 通过 query 查找
$customer = Customer::find()->active()->all(); // 通过 query 查找全部(使用 `active` 范围)

直接使用命令行

Redis 有很多可以直接从连接中使用的有用的命令。在配置应用程序后,如 安装 所示,连接可以像下面这样获取:

$redis = Yii::$app->redis;

完成之后可以执行如下命令。最通用的方法是使用 executeCommand 方法:

$result = $redis->executeCommand('hmset', ['test_collection', 'key1', 'val1', 'key2', 'val2']);

每个命令都有相应的快捷方式支持,所以可以像下面这样代替以上的命令:

$result = $redis->hmset(['test_collection', 'key1', 'val1', 'key2', 'val2']);

可用命令列表和他们的参数可参阅 redis.io/commands。

缓存组件的使用

为了使用 Cache 组件,如 安装 章节中所描述的,除了配置连接, 你也需要配置 [[yii\redis\Cache]] 中的 cache 组件:

return [
    //....
    'components' => [
        // ...
        'cache' => [
            'class' => 'yii\redis\Cache',
        ],
    ]
];

如果你只使用 redis 缓存(即,不使用它的活动记录或者会话),您还可以配置缓存组件内的 连接参数(在这种情况下,不需要配置连接应用程序的组件):

return [
    //....
    'components' => [
        // ...
        'cache' => [
            'class' => 'yii\redis\Cache',
            'redis' => [
                'hostname' => 'localhost',
                'port' => 6379,
                'database' => 0,
            ],
        ],
    ]
];

会话组件的使用

为了使用 Session 组件,如 安装 章节中所描述的,除了配置连接, 你也需要配置 yii\redis\Session 中的 session 组件:

return [
    //....
    'components' => [
        // ...
        'session' => [
            'class' => 'yii\redis\Session',
        ],
    ]
];

如果你只使用 redis 会话(即,不使用它的活动记录或者缓存),您还可以配置会话组件内的 连接参数(在这种情况下,不需要配置连接应用程序的组件):

return [
    //....
    'components' => [
        // ...
        'session' => [
            'class' => 'yii\redis\Session',
            'name' => 'advanced-api', // 当前的会话名称
            'timeout' => 3600, // 过期被清理的秒数
            'keyPrefix' => 'session:app:', // 缓存键的前缀字符串
            'redis' => [
                'class' => 'yii\redis\Connection',
                'hostname' => 'localhost',
                'port' => 6379,
                'database' => 0,
            ],
            // 会话cookie参数,可以用于同一级域名下的子域名项目之前共享 session
            /*'cookieParams' => [
                'path' => '/',
                'httpOnly' => true,
                'domain' => 'xxx.com',
                'lifetime' => 3600,
            ],*/
        ],
    ]
];

💖喜欢本文档的,欢迎点赞、收藏、留言或转发,谢谢支持!
作者邮箱:zhuzixian520@126.com,github地址:github.com/zhuzixian520

Last Updated:
Contributors: Hans
Prev
数据库迁移
Next
Sphinx