<?php

namespace loyalsoft;

/**
 * 对象字段将以hash表结构存入Redis中.
 * 以达到拆分读写各个子节点的目标, 最终能够节省(带宽、内存、运算)消耗,提升性能.
 * @author gwang 
 * @version 1.0.0 创建. 2年以前就跟高健讨论过的理念,我一直没有落到实处(高健已经使用了). --gwang 2020.4.24
 */
class HashSaver extends Object_ext {

    private static $save_tag = array();

    /**
     * 添加回存记录
     * @param type $name
     */
    protected static function save_tag($name) {
        self::$save_tag[] = $name;
    }

    //
    // <editor-fold defaultstate="collapsed">

    /**
     * 自定义的数据加载方式
     * @param type $tag
     */
    function readDataFromMem($mem_key) {
        $ret = gMem()->hgetall($mem_key);                                       # 已JSON解析
        if (null == $ret) {
            return $ret;
        }
//        my_Assert(null != $ret, ErrCode::err_mem);                              # 未找到数据
        $this->LoadFrom($ret);
        return $this;
    }

    /**
     * 存储数据到redis
     */
    function updateData($mem_key) {
        return gMem()->hmset($mem_key, $this);
    }

    /**
     * 存储数据到redis
     */
    function updateData2($mem_key) {
        $data = array();
        foreach (self::$save_tag as $k) {
            $data[$k] = $this->$k;
        }
        return gMem()->hmset($mem_key, $data);
    }

    // </editor-fold>
}
