java redis 命名空间_redis里通过命名空间存储缓存,根据结构生成树型
一般为了方便管理 redis 缓存,我们通过 : 来分隔不同的 key 来进行存储缓存,这样方便查看。
例如:
game:upload_role:1000
game:member_info:2000
game:member_info:state_info:3000
上面的这种结构在 Redis Desktop Manager 中就会显示如下:
我们可以通过 keys 命令来获取 redis 里的所有 key。但这些 key 是没有层次的,如何生成?
只能通过 : 分隔符来处理各 key 的上下层关系。
代码如下:
function relationCache($keys, &$index, &$index_tree)
{
$result = [];
if ($keys) {
foreach ($keys as $key) {
$arr = explode(':', $key);
$len = count($arr);
for ($ix = 0; $ix < $len; $ix++) {
$cur_key = implode(':', array_slice($arr, 0, $ix + 1));
if (!isset($index_tree[$cur_key])) {
$index_tree[$cur_key] = $index++;
$pid = 0;
if ($ix >= 1) {
$pre_key = implode(':', array_slice($arr, 0, $ix));
$pid = $index_tree[$pre_key];
}
$result[] = [
'id' => $index_tree[$cur_key],
'pid' => $pid,
'name' => $arr[$ix],
'key' => $cur_key,
];
}
}
}
}
return $result;
}
然后生成树型的函数如下:
function genTree($items, $id = 'id', $pid = 'pid', $son = 'child')
{
$tree = array();
$tmpMap = array();
foreach ($items as $item) {
$tmpMap[$item[$id]] = $item;
}
foreach ($items as $item) {
if (isset($tmpMap[$item[$pid]])) {
$tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]];
} else {
$tree[] = &$tmpMap[$item[$id]];
}
}
unset($tmpMap);
return $tree;
}
使用如下:
$keys = [
'game:upload_role:1000',
'game:member_info:2000',
'game:member_info:state_info:3000',
];
//索引
$index = 1;
//索引树
$index_tree = [];
//注意,如果想多次调用relationCache,并共享索引,请通过外部传参的方式
$result = relationCache($keys, $index, $index_tree);
$result = genTree($result, 'id', 'pid', 'children');
echo '
';
print_r($result);
这样生成的结果,通过json_encode就可以使用 zTree 来显示了。
以上内容希望帮助到大家,
很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家
,需要戳这里
java redis 命名空间_redis里通过命名空间存储缓存,根据结构生成树型相关推荐
- java redis 原子操作_redis快速入门
Redis服务的启动 redis-server.exe redis.windows.conf 连接Redis服务器 redis-cli.exe -h 127.0.0.1 -p 6379 (p代表的是p ...
- java redis教程_Redis 使用教程 (全)
NoSQL简介 1.NoSQL:全名为Not Only SQL,指的是非关系型的数据库 随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来 2.优点与缺点分析 ①优点:高可扩展性 ...
- java redis 下载_redis Java源代码 redis.rar - 下载 - 搜珍网
压缩包 : redis.rar 列表 redis/.classpath redis/.mymetadata redis/.project redis/.settings/.jsdtscope redi ...
- java redis事务_Redis事务
Redis 事务可以一次执行多个命令.将多个命令加入一个队列中,使用exec执行.执行过程中不会被其他命令打断,但是在命令被加入队列过程中出错,整个队列的命令都不会被执行. Redis事务命令 命令说 ...
- java redis 过期_Redis中的键值过期操作
1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...
- java redis计数器_Redis原子计数器incr,防止并发请求
一.前言 在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试.这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流 ...
- java redis 去重_redis去重方案
tpn(taobao push notification)在使用redis计算消息未读数的过程中,遇到了一系列的问题,下面把这个过程整理了一下,也让大家了解这个纠结的过程,供大家以后使用redis或者 ...
- java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...
- java redis 抽奖_Redis数据结构的多种用法(转载)
分布式锁(string) setnx key value,当key不存在时,将 key 的值设为 value ,返回1.若给定的 key 已经存在,则setnx不做任何动作,返回0. 当setnx返回 ...
最新文章
- 男生遇到漂亮MM就变傻
- 基本类型和引用类型的值 函数的传递参数
- 三十二、电子商务服务推荐模型构建
- Java多线程的4种实现方式
- C++运算符重载函数作为类成员函数和友元函数
- 水印鲁棒性的分析matlab程序,图像数字水印+matlab程序
- 信息学奥赛一本通(1016:整型数据类型存储空间大小)
- 全球芯片供应不足!苹果iPhone生产可能面临中断风险
- Linux 下从头再走 GTK+-3.0 (一)
- [NFrog]工具(NHibernate)终于成形了
- C++ 临时变量的常量性
- 自动语音识别的原理是什么,它的作用是什么
- 如何使用Hasu USB to USB Controller Converter刷写tmk固件交换Caps和Ctrl
- pythonturtle是标准库_Python常用标准库1-Turtle,Random,Time和Datetime
- 怎么卸载mysql2008_SQL Server 2008怎么卸载?SQL Server 2008完全卸载教程
- 小游戏策划案例精选_小游戏活动策划方案
- Python3使用xpath爬取豆丁网文档
- linux leach仿真数据传输图性能,基于OMNeT-+-+的Leach协议的仿真研究.pdf
- Zemax操作20--柱透镜
- Player 本地播放器推荐-倍速播放-本地视频播放器-播放器-电脑手机互传文件-附下载地址