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;
	}
}
相关推荐
NeverFear7921 小时前
【黑马点评】短信登录
java·redis·tomcat·intellij-idea
攻城有术2 小时前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
spencer_tseng2 小时前
kylin redis-6.2.14.tar.gz
linux·redis·kylin·edis-6.2.14
xbgRS2 小时前
Redis基本概念及应用
redis·缓存
草莓熊Lotso3 小时前
【Redis 初阶】特殊数据类型、渐进式遍历与数据库操作生产指南
linux·网络·数据库·redis·tcp/ip·缓存·bootstrap
λqaq73 小时前
Redis 数据库基础:安装、5 大核心数据类型与常用命令
linux·数据库·redis·python·缓存
莫得感情 o3 小时前
Redis 04 · 执行模型:一条命令的生命周期与 I/O 多路复用
redis·缓存
xbgRS3 小时前
Redis使用及数据结构
redis
小番茄程序猿5 小时前
别再死背 44 字节了:12 轮压测,实测 Redis String 三种编码的真实差距
redis
qetfw5 小时前
Debian Nginx + PHP-FPM 配置:FastCGI、站点目录与访问验证
linux·nginx·debian·php