一般为了方便管理 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里通过命名空间存储缓存,根据结构生成树型相关推荐

  1. java redis 原子操作_redis快速入门

    Redis服务的启动 redis-server.exe redis.windows.conf 连接Redis服务器 redis-cli.exe -h 127.0.0.1 -p 6379 (p代表的是p ...

  2. java redis教程_Redis 使用教程 (全)

    NoSQL简介 1.NoSQL:全名为Not Only SQL,指的是非关系型的数据库 随着访问量的上升,网站的数据库性能出现了问题,于是nosql被设计出来 2.优点与缺点分析 ①优点:高可扩展性 ...

  3. java redis 下载_redis Java源代码 redis.rar - 下载 - 搜珍网

    压缩包 : redis.rar 列表 redis/.classpath redis/.mymetadata redis/.project redis/.settings/.jsdtscope redi ...

  4. java redis事务_Redis事务

    Redis 事务可以一次执行多个命令.将多个命令加入一个队列中,使用exec执行.执行过程中不会被其他命令打断,但是在命令被加入队列过程中出错,整个队列的命令都不会被执行. Redis事务命令 命令说 ...

  5. java redis 过期_Redis中的键值过期操作

    1.过期设置 Redis 中设置过期时间主要通过以下四种方式: expire key seconds:设置 key 在 n 秒后过期: pexpire key milliseconds:设置 key ...

  6. java redis计数器_Redis原子计数器incr,防止并发请求

    一.前言 在一些对高并发请求有限制的系统或者功能里,比如说秒杀活动,或者一些网站返回的当前用户过多,请稍后尝试.这些都是通过对同一时刻请求数量进行了限制,一般用作对后台系统的保护,防止系统因为过大的流 ...

  7. java redis 去重_redis去重方案

    tpn(taobao push notification)在使用redis计算消息未读数的过程中,遇到了一系列的问题,下面把这个过程整理了一下,也让大家了解这个纠结的过程,供大家以后使用redis或者 ...

  8. java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍

    jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...

  9. java redis 抽奖_Redis数据结构的多种用法(转载)

    分布式锁(string) setnx key value,当key不存在时,将 key 的值设为 value ,返回1.若给定的 key 已经存在,则setnx不做任何动作,返回0. 当setnx返回 ...

最新文章

  1. 男生遇到漂亮MM就变傻
  2. 基本类型和引用类型的值 函数的传递参数
  3. 三十二、电子商务服务推荐模型构建
  4. Java多线程的4种实现方式
  5. C++运算符重载函数作为类成员函数和友元函数
  6. 水印鲁棒性的分析matlab程序,图像数字水印+matlab程序
  7. 信息学奥赛一本通(1016:整型数据类型存储空间大小)
  8. 全球芯片供应不足!苹果iPhone生产可能面临中断风险
  9. Linux 下从头再走 GTK+-3.0 (一)
  10. [NFrog]工具(NHibernate)终于成形了
  11. C++ 临时变量的常量性
  12. 自动语音识别的原理是什么,它的作用是什么
  13. 如何使用Hasu USB to USB Controller Converter刷写tmk固件交换Caps和Ctrl
  14. pythonturtle是标准库_Python常用标准库1-Turtle,Random,Time和Datetime
  15. 怎么卸载mysql2008_SQL Server 2008怎么卸载?SQL Server 2008完全卸载教程
  16. 小游戏策划案例精选_小游戏活动策划方案
  17. Python3使用xpath爬取豆丁网文档
  18. linux leach仿真数据传输图性能,基于OMNeT-+-+的Leach协议的仿真研究.pdf
  19. Zemax操作20--柱透镜
  20. Player 本地播放器推荐-倍速播放-本地视频播放器-播放器-电脑手机互传文件-附下载地址

热门文章

  1. 说好的敬畏每一行代码呢?Antd代码彩蛋炸翻一圈人
  2. Java实现数据库表结构导出到Excel
  3. centerOs-6.8的安装
  4. Case when then esle end
  5. 多线程同步之 WaitableTimer (等待定时器对象)[续三]
  6. moss管理中心崩溃之解决
  7. 坑爹坑娘坑祖宗的87端口(记一次tomcat故障排查)
  8. openblas 矩阵算法库 简介
  9. goland 创建工程(go mod)singo
  10. apache solr rce cve-2019-0192 分析