当前位置: 首页 > news >正文

thinkphp6 redis 哈希存储方式以及操作函数(笔记)

逻辑:如果redis里没有指定表数据就进行存储再输出,如果有就直接输出,代码优化后几万条数据从数据库入redis也是三四秒的时间,数据以json方式存储:key用于数据ID 跟数据库数据ID同步,value用于存储整个字段包括数据,这样数据多不会占用多余内存

$name参数是数据库表名,跟数据库表名是同步一样的,直接调用即可

/*** 缓存指定表全部数据* @Author Xven <270988107@qq.com>* @return [type]                  [description]*/
function redis_data($name) {$redis = Cache::store('redis');$data = [];// 尝试从 Redis 获取数据$lists = $redis->hGetAll($name . ':list');if (!empty($lists)) {// Redis 中有数据,直接解码并返回foreach ($lists as $key => $value) {$data[$key] = json_decode($value, true);}} else {// Redis 中没有数据,从数据库获取并写入 Redis$list = Db::name($name)->cursor();$encodedData = [];// 开始一个多重操作$redis->multi();foreach ($list as $item) {$encoded = json_encode($item, JSON_UNESCAPED_UNICODE);$redis->hSet($name . ':list', $item['id'], $encoded);$data[] = $item; // 直接将数据库查询结果添加到 $data 数组中}// 执行多重操作中的所有命令$redis->exec();}return $data;
}
/*** 查询指定ID单条数据* @Author Xven <270988107@qq.com>* @param  [type]                  $name [description]* @param  [type]                  $id   [description]* @return [type]                        [description]*/
function find_redis($name, $id) {$redis = Cache::store('redis');$info = $redis->hMget($name . ':list', [$id]);if (!empty($info)) {$info = json_decode($info[$id], true);return $info;} else {return '';}
}
/*** 指定ID数据重存更新* @Author Xven <270988107@qq.com>* @param  [type]                  $id   [description]* @param  [type]                  $name [description]* @return [type]                        [description]*/
function update_redis($name, $id, $field) {$redis = Cache::store('redis');$cursor = Db::name($name)->where('id', $id)->limit(1)->cursor();foreach ($cursor as $v) {if (!empty($v)) {$sela = $redis->hSet($field, $id, json_encode($v));if ($sela) {return true;} else {return false;}}}
}
/*** 指定ID数据重存更新* @Author Xven <270988107@qq.com>* @param  [type]                  $id   [description]* @param  [type]                  $name [description]* @return [type]                        [description]*/
function del_redis($field, $id) {$redis = Cache::store('redis');$info = $redis->hDel($field, $id);if ($info) {return true;} else {return false;}
}

http://www.lryc.cn/news/476881.html

相关文章:

  • 「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
  • 【嵌入式】STM32中的SPI通信
  • 后端:Spring、Spring Boot-配置、定义bean
  • 【Git】Git 远程仓库命令详解
  • html简易流程图
  • Java 入门
  • JVM基本结构和垃圾回收机制
  • CentOS 7 安装 ntp,自动校准系统时间
  • Spring Boot 配置文件启动加载顺序
  • webrtc agc2实现原理
  • 2024.11.03 周报
  • Oceanbase学习之一迁移mysql数据到oceanbase
  • Milvus - GPU 索引类型及其应用场景
  • Webserver(2.8)守护进程
  • HarmonyOS :
  • C# EF 使用
  • 简介Voronoi图Voronoi Diagrams
  • 硬件测试工程师之EMC项目-辐射抗扰度试验(RS)测试标准解析思维导图
  • H265编码丢帧问题分析
  • CentOS Linux教程(12)--常用编辑器
  • 【浏览器学习笔记】-- 浏览器检查jQuery是否加载
  • 大模型的提示学习
  • 2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
  • 鸿蒙移动应用开发-------前篇
  • ROS(Robot Operating System)中,编写一个记录机器人速度并将其转换成轨迹
  • 了解bootstrap改造asp.net core MVC的样式模板
  • 【C++】对左值引用右值引用的深入理解(右值引用与移动语义)
  • 寻找符合要求的最长子串
  • 【vim文本编辑器gcc编译器gdb调试器】
  • 解决使用Golang的email库发送qq邮件报错short response,错误类型为textproto.ProtocolError