CacheDao.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\common\dao\system;
  12. use app\common\dao\BaseDao;
  13. use app\common\model\BaseModel;
  14. use app\common\model\system\Cache;
  15. use think\db\exception\DbException;
  16. /**
  17. * Class CacheDao
  18. * @package app\common\dao\system
  19. * @author xaboy
  20. * @day 2020-04-24
  21. */
  22. class CacheDao extends BaseDao
  23. {
  24. /**
  25. * @return BaseModel
  26. * @author xaboy
  27. * @day 2020-03-30
  28. */
  29. protected function getModel(): string
  30. {
  31. return Cache::class;
  32. }
  33. /**
  34. * 根据键获取缓存结果
  35. *
  36. * 本函数旨在通过指定的键从缓存数据库中检索相应的结果。如果找到结果,它将尝试解析JSON格式的数据并返回解码后的数组;
  37. * 如果未找到结果,则返回null。使用此函数可以方便地获取和处理缓存中的数据,而无需直接与缓存存储交互。
  38. *
  39. * @param string $key 缓存中的键,用于唯一标识缓存的数据。
  40. * @return array|null 返回解码后的JSON数据作为数组,如果未找到则返回null。
  41. */
  42. public function getResult($key)
  43. {
  44. // 从缓存数据库中根据键获取结果值
  45. $val = Cache::getDB()->where('key', $key)->value('result');
  46. // 如果值存在则解码JSON数据并返回数组,否则返回null
  47. return $val ? json_decode($val, true) : null;
  48. }
  49. /**
  50. * 更新缓存中的数据。
  51. * 此方法用于根据给定的键更新缓存数据。特别是,如果数据数组中包含一个名为'result'的元素,
  52. * 它将被转换为JSON格式,以便在数据库中以更紧凑、可搜索的形式存储。
  53. *
  54. * @param string $key 缓存条目的键。用于唯一标识缓存数据。
  55. * @param array $data 包含要更新的数据的数组。如果数组中包含'result'键,其值将被转换为JSON格式。
  56. */
  57. public function keyUpdate(string $key, $data)
  58. {
  59. // 检查$data数组中是否包含'result'键
  60. // 如果存在,则将其值转换为JSON格式,使用JSON_UNESCAPED_UNICODE选项保留多字节字符
  61. if (isset($data['result']))
  62. $data['result'] = json_encode($data['result'], JSON_UNESCAPED_UNICODE);
  63. // 使用Cache的getDB方法获取数据库实例,并根据$key更新数据
  64. // 这里假设Cache::getDB()返回一个可用于执行数据库操作的对象
  65. Cache::getDB()->where('key', $key)->update($data);
  66. }
  67. /**
  68. * 根据一组键搜索缓存数据。
  69. *
  70. * 本函数旨在通过提供的键数组,从缓存数据库中检索对应的结果。它首先构造一个查询,以键为条件检索缓存,
  71. * 然后对检索到的数据进行处理,将其转换为PHP对象,最后返回处理后的数据数组。
  72. *
  73. * @param array $keys 键的数组,用于查找缓存数据。
  74. * @return array 返回一个键值对数组,其中每个键对应的值是从缓存中检索到的数据对象。
  75. */
  76. public function search(array $keys)
  77. {
  78. // 从缓存数据库中查询键对应的缓存结果,以键为索引。
  79. $cache = $this->getModel()::getDB()->whereIn('key',$keys)->column('result','key');
  80. $ret = [];
  81. // 遍历查询结果,将JSON格式的缓存数据转换为PHP对象。
  82. foreach ($cache as $k => $v) {
  83. $ret[$k] = json_decode($v);
  84. }
  85. return $ret;
  86. }
  87. }