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

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

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

php 复制代码
/**
 * 缓存指定表全部数据
 * @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;
}
php 复制代码
/**
 * 查询指定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 '';
	}
}
php 复制代码
/**
 * 指定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;
			}
		}
	}
}
php 复制代码
/**
 * 指定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;
	}
}
相关推荐
编程彩机25 分钟前
互联网大厂Java面试:从分布式事务到微服务优化的技术场景解读
java·spring boot·redis·微服务·面试·kafka·分布式事务
Moshow郑锴34 分钟前
Spring Boot Data API 与 Redis 集成:KPI/图表/表格查询的缓存优化方案
spring boot·redis·缓存
TracyCoder1231 小时前
Redis 进阶之路:探秘事务、Lua 与特殊数据结构
数据结构·redis·lua
小毅&Nora1 小时前
# 【后端】【Redis】③ Redis 8队列全解:从“快递分拣站“到“智能配送系统“,一文彻底掌握队列机制
redis·bootstrap·队列
三水不滴1 小时前
SpringBoot+Caffeine+Redis实现多级缓存
spring boot·redis·笔记·缓存
indexsunny2 小时前
互联网大厂Java面试实战:从Spring Boot到Kafka的技术与业务场景解析
java·spring boot·redis·面试·kafka·技术栈·microservices
4311媒体网2 小时前
Libvio.link 页面布局与数据分布
java·php
笨蛋不要掉眼泪2 小时前
Redis持久化解析:RDB和AOF的对比
前端·javascript·redis
心.c2 小时前
Vue3+Node.js实现文件上传分片上传和断点续传【详细教程】
前端·javascript·vue.js·算法·node.js·哈希算法
小宇的天下2 小时前
Cadence allegro---assign net
服务器·php·apache