基于Redis的快照模型实现

实现要求:

对模型对象以及关联信息,在需要时能方便地做到快速映射,获取,删除。


举例说明:

-- 销售订单(SalesOrder)及其子项(SalesOrderItem),需要在用户下单后,支付后或其他状态改变时进行快照。


步骤:

- 安装 yii2-redis 扩展

<code>composer.phar require --prefer-dist yiisoft/yii2-redis:"~2.0.0"</code>


- 建立快照模型,继承common\models\c2\redis\ActiveRecord, 里面做了定制化primaryKey, 并加入了时间戳等behaviors。

common\models\c2\redis\snapshot\SalesOrder

  • 以 [code, s_checkpoint] 为 primaryKey
  • 规定了这个快照的属性,包括原实体模型的属性,相关联的标签属性也加入,比如支付方法,支付号,支付状态,收货地址等
  • 与common\models\c2\redis\snapshot\SalesOrder\SalesOrderItem建立关系,增删时的关联操作


common\models\c2\redis\snapshot\SalesOrder\SalesOrderItem

  • 规定了这个快照的属性,包括原实体模型的属性,相关联的标签属性也加入,比如货品号,货品价格等


- 建立 SnapshotBehavior, 为实体类提供快照方法

  • getSnapshotAttributes() - 返回实体类实际映射的属性,快照保存时使用
  • takeSnapshot($checkpoint = "") - 根据检查点存储该模型映射的快照
  • getSnapshot($checkpoint = "")- 根据检查点获取该模型映射的快照
  • deleteSnapshot($checkpoint = "")- 根据检查点删除该模型映射的快照


- 修改实体类 SalesOrder

  • public function behaviors() {
            return \yii\helpers\ArrayHelper::merge(parent::behaviors(), [
                        'snapshotBehavior' => [
                            'class' => \common\behaviors\SnapshotBehavior::class,
                            'snapshotClass' => \common\models\c2\redis\snapshot\SalesOrder::class,
                            'primaryKey' => 'code',
                        ],
            ]);
        }
  • 实现 getSnapshotAttributes() 方法,指定具体属性


测试

$model = \common\models\c2\entity\SalesOrder::findOne(['code' => $code]);
$result = $model->takeSnapshot(SalesOrderStateType::TYPE_PAYED);
$ssModel = $model->getSnapshot(SalesOrderStateType::TYPE_PAYED);
$result = $model->deleteSnapshot(SalesOrderStateType::TYPE_PAYED);



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bennybi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值