Database Yii2+Redis作为数据库

Database Yii2+Redis作为数据库,database,activerecord,redis,yii2,models,Database,Activerecord,Redis,Yii2,Models,我想使用Yii2和redis作为数据库 到目前为止,我从这里得到了Yii2的Redis ActiveRecord类 但是,我有个问题。为什么这个类在REDIS中添加任何作为哈希的内容 在上面,我找不到它插入数据的模式。我添加了一个用户,它将在user:xxx名称空间下添加一个用户,在s:user:xxx下添加另一个记录,以此类推,但没有一个主题具有我在属性中定义的任何字段!!仅包含ID 我知道键值型数据库和RDBMS是不同的,也知道如何在Redis中实现像记录一样的关系,但我不知道为什么它只保存

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

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

但是,我有个问题。为什么这个类在REDIS中添加任何作为哈希的内容

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

我知道键值型数据库和RDBMS是不同的,也知道如何在Redis中实现像记录一样的关系,但我不知道为什么它只保存ID

到目前为止,我还没有找到任何使用redis ActiveRecords的例子

这里有一个,还不够好

我的主要想法是:如何使用activeRecords和YII2中的不同数据类型向redis添加数据

如果ActiveRecords无法实现,那么最好的解决方案是什么?在这种情况下

另一个问题:是否可以改用模型并编写自己的Model::save方法?以这种速度,最好的数据验证解决方案是什么

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

所以我需要做大量的验证,当然还有身份验证,保存和选择,范围和保存,以设置一个列表,等等


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

Redis DB可以声明为缓存组件或数据库连接,或者两者兼而有之

当使用声明为缓存组件时,可以在该组件内访问它以存储键/值对

另外,其他组件可能会开始使用它来缓存建议,如会话(如果配置为这样做),或者类似,默认情况下,会话将尝试在配置文件的缓存组件下定义的任何有效缓存机制中缓存生成的URL规则,如前所述。因此,在这种情况下,查找除您之外的其他存储数据是正常的

当Redis被声明为DB连接时,如您提供的链接中所示,这意味着使用该类,您可以使您的模型像Yii中的任何其他ActiveRecord模型一样扩展其类。到目前为止,我所知道的唯一区别是,您需要手动定义属性,因为NoSQL数据库没有要解析的DB模式。然后定义你的规则、场景、关系、事件。。。与任何其他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() {...}
    ...
}

所有可用方法,包括保存、验证、获取错误等。。。可以找到,并且应该像任何其他ActiveRecord类一样使用。

请帮助…谢谢,所以没有办法为列表或集合等其他对象设置属性或数据类型?在预定义的方法中。我可以定义自己的保存方法并更改其功能吗?但是,验证是一个问题,如果我重写save方法,它会工作吗?是的,您总是可以重写模型中从BaseActiveRecord继承的原始方法。但您可能只需要覆盖较低级别的方法,以便更好地了解它的工作原理,请查看yii/redis/ActiveRecord。您始终可以覆盖这些方法或在模型中引入新方法$db->executeCommand$命令是此处与REDIS通信的主要功能……默认值还请注意,默认保存方法将更新或插入新记录。如果需要重写该方法,只需执行相同的操作,所有操作都应该正常工作。
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() {...}
    ...
}