Yii2 + Redis 作为数据库

2023-12-30

我想使用 Yii2 和 redis 作为数据库。

到目前为止,我从这里获得了 Yii2 的 Redis ActiveRecord 类。

link1 https://github.com/yiisoft/yii2-redis

link2 http://www.yiiframework.com/doc-2.0/ext-redis-index.html

但是,我遇到了问题。为什么这个类在 Redis 中添加任何内容作为哈希???

在上面我找不到它插入数据的模式。我添加一个用户,它会在下面添加一个用户user:xxx命名空间和另一条记录s:user:xxx等等,但没有一个主题具有我在属性中定义的任何字段!仅包含 ID。

我知道Key-value类型数据库和RDBMS是不同的,也知道如何在Redis中实现类似记录的关系,但我不知道为什么它只会保存ID。

到目前为止,我找不到任何使用 redis ActiveRecords 的示例。

这里有一个,但还不够好。

所以这是我的主要问题:如何在 YII2 中使用活动记录和不同的数据类型向 Redis 添加数据?

如果 Active Records 无法做到这一点,最好的解决方案是什么?在这种情况下

另一个问题:是否可以使用模型来代替并编写我自己的 model::save() 方法?以这种速度,最好的数据验证解决方案是什么?

实际上我想制作一个电报机器人,所以我应该获取消息并在 RabitMQ 中发送它们,并在工作程序中获取数据,执行该过程并将结果保存到 Redis,最后通过 RabitMQ 将响应发送给用户。

因此,我需要进行大量验证,当然还有身份验证,然后保存、选择、范围和保存以设置列表以及这个和那个......

我想要一种好方法来制作模型或活动记录或验证、保存和检索数据到 Redis 和 Yii2 的正确解决方案。


Redis DB 可以声明为cache组件或作为数据库连接 or both.

当它被声明为cache成分 (使用yii/redis/缓存 http://www.yiiframework.com/doc-2.0/yii-redis-cache.html)可以在该组件中访问它来存储核心价值 pairs 如图所示 http://www.yiiframework.com/doc-2.0/guide-caching-data.html.

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

// try retrieving $data from cache
$data = $cache->get($key);
// store $data in cache so that it can be retrieved next time
$cache->set($key, $data);

// one more example:
$access_token = Yii::$app->security->generateRandomString();
$cache->add(
    // key
    $access_token, 
    // data (can also be an array)
    [
        'id' => Yii::$app->user->identity->id
        'name' => Yii::$app->user->identity->name
    ], 
    // expires
    60*60*3
);

其他组件也可能开始使用它来缓存建议,例如session如果配置为这样做或喜欢yii\web\UrlManager http://www.yiiframework.com/doc-2.0/yii-web-urlmanager.html默认情况下,它将尝试在配置文件下定义的任何有效缓存机制中缓存生成的 URL 规则cache组件如所解释here http://www.yiiframework.com/doc-2.0/yii-web-urlmanager.html#%24cache-detail。因此,在这种情况下找到一些与您不同的存储数据是正常的。

当 Redis 被声明为数据库连接就像您提供的链接中一样,这意味着使用yii\redis\连接 http://www.yiiframework.com/doc-2.0/yii-redis-connection.html类,你可以让你的模型扩展它的\yii\redis\ActiveRecord http://www.yiiframework.com/doc-2.0/yii-redis-activerecord.html类与 Yii 中的任何其他 ActiveRecord 模型一样。到目前为止我知道的唯一区别是您需要手动定义属性,因为没有可解析 NoSQL 数据库的数据库模式。然后只需像任何其他 ActiveRecord 模型一样定义您的规则、场景、关系、事件……:

class Customer extends \yii\redis\ActiveRecord
{
    public function attributes()
    {
        return ['id', 'name', 'address', 'registration_date'];
    }

    public function rules()
    {
        return [
            ['name', 'required'],
            ['name', 'string', 'min' => 3, 'max' => 12, 'on' => 'register'],
            ...
        ];
    }

    public function attributeLabels() {...}
    ...
}

所有可用的方法包括save(), validate(), getErrors(), ... 可以找到here http://www.yiiframework.com/doc-2.0/yii-redis-activerecord.html并且应该像任何其他 ActiveRecord 类一样使用如官方指南所示 http://www.yiiframework.com/doc-2.0/guide-db-active-record.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Yii2 + Redis 作为数据库 的相关文章

  • 在 SQLAlchemy 中选择 NULL 值

    这是我的 PostgreSQL 表 test gt create table people name varchar primary key marriage status varchar test gt insert into peopl
  • SQLite 性能基准 - 为什么 :memory: 这么慢...只有磁盘速度的 1.5 倍?

    为什么 sqlite 中的 memory 这么慢 我一直在尝试查看使用内存中的 sqlite 与基于磁盘的 sqlite 是否可以获得任何性能改进 基本上我想用启动时间和内存来换取非常快速的查询not在应用程序过程中击中磁盘 然而 以下基准
  • 在 MongoDB 中查找 7 天前的记录

    我有一个包含对象的集合 如下所示 1 id ObjectId 551c6605e4c6ac495c923aab sender id ObjectId 551c6605e4c6ac495c923aac rep sender id 38 sen
  • 哪些 ORM 与 Scala 配合得很好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 什么时候数据库被称为嵌入式数据库?

    术语 嵌入式数据库 与 数据库 具有不同的含义吗 我见过的嵌入式数据库有两种定义 嵌入式数据库就像专门为 嵌入式 空间 移动设备等 设计的数据库系统一样 这意味着它们在紧张的环境中 内存 CPU 方面 可以合理地执行 嵌入式数据库就像不需要
  • Rails - 动态构建深度嵌套对象(Cocoon /nested_form)

    我目前有一个具有深层嵌套的复杂形式 并且我正在使用Cocoon https github com nathanvda cocoongem 根据需要动态添加部分 例如 如果用户想要在销售表单中添加另一辆车 代码如下所示 div class a
  • 在哪里可以下载可用作数据仓库的示例数据库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以下载可用于创建数据仓库的示例数据库 它不应该是来自 Microsoft Northwind
  • Hibernate 乐观锁..它是如何工作的?

    我正在阅读下面关于休眠乐观锁定的博客 我打算将它与休眠一起使用 但是 我有一个担忧 我们有java代码和c 代码 都连接到一个数据库 虽然java代码可以使用hibernate来实现乐观锁定 但我想让c 代码做同样的事情 此外 C 代码正在
  • 具有匹配模式的 ioredis 密钥

    我想用键匹配模式 LOGIN 搜索 Redis 数据库 我在我的应用程序中使用 ioredis 昨天我搜索了整个网络 我得到了一些执行这项工作的选项 如下所示 KEYS 扫描流 Issue import Redis from ioredis
  • DB2连接授权失败原因:Java不支持安全机制

    我正在尝试使用 DB2JDBC Type4 驱动程序配置 DB2 连接 但我收到这个错误 线程 main 中的异常 com ibm db2 jcc am SqlInvalidAuthorizationSpecException jcc t4
  • Elasticsearch 聚合过滤器

    因为我在谷歌上找不到任何东西 是否可以在elasticsearch中过滤聚合 我正在考虑这样的事情 获取 SOME object X gt 100 的所有对象 提前致谢 编辑 样本数据 我有以下文档结构 docKey 1 value 2 d
  • Redis 客户端忽略其上设置的配置选项并尝试连接到默认 IP 127.0.01

    在AWS中 我使用ElastiCache Redis服务器并使用节点作为后端和 promise redis 包 这就是我尝试连接到我的 redis 服务器端点的方法 client redis createClient host my red
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • 如何在Redis中使用HSCAN命令?

    我想在我的作业中使用 Redis 的 HSCAN 命令 但我不知道它是如何工作的 Redis 的官方页面 http redis io commands hscan http redis io commands hscan 这个命令给了我空白
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • ActiveRecord:向包含的 ON 子句添加条件

    我有一个模型报价和另一个历史报价 一个报价有很多历史报价 现在 我想立即加载一组报价的某一天的历史报价 如果存在 为此 我认为我需要将这一天传递给 ON 子句 而不是 WHERE 子句 以便我获得所有报价 即使在给定日期没有历史报价时也是如
  • 执行 SET {Key} 超时,inst: 0,mgr: Inactive,queue: 2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

    我正在尝试使用 StackExchange Redis 客户端将 90 KB pdf 文件保存到 Azure Redis 缓存中 我已将该文件转换为字节数组并尝试使用 stringSet 方法保存它并收到错误 Code byte bytes
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra

随机推荐