HashSaver.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * 对象字段将以hash表结构存入Redis中.
  5. * 以达到拆分读写各个子节点的目标, 最终能够节省(带宽、内存、运算)消耗,提升性能.
  6. * @author gwang
  7. * @version 1.0.0 创建. 2年以前就跟高健讨论过的理念,我一直没有落到实处(高健已经使用了). --gwang 2020.4.24
  8. */
  9. class HashSaver extends Object_ext {
  10. private static $save_tag = array();
  11. /**
  12. * 添加回存记录
  13. * @param type $name
  14. */
  15. protected static function save_tag($name) {
  16. self::$save_tag[] = $name;
  17. }
  18. //
  19. // <editor-fold defaultstate="collapsed">
  20. /**
  21. * 自定义的数据加载方式
  22. * @param type $tag
  23. */
  24. function readDataFromMem($mem_key) {
  25. $ret = gMem()->hgetall($mem_key); # 已JSON解析
  26. if (null == $ret) {
  27. return $ret;
  28. }
  29. // my_Assert(null != $ret, ErrCode::err_mem); # 未找到数据
  30. $this->LoadFrom($ret);
  31. return $this;
  32. }
  33. /**
  34. * 存储数据到redis
  35. */
  36. function updateDataFull($mem_key) {
  37. return gMem()->hmset($mem_key, $this);
  38. }
  39. /**
  40. * 存储数据到redis
  41. */
  42. function updateDataByTag($mem_key) {
  43. $data = array();
  44. foreach (self::$save_tag as $k) {
  45. $data[$k] = $this->$k;
  46. }
  47. return gMem()->hmset($mem_key, $data);
  48. }
  49. // </editor-fold>
  50. }