千家信息网

redis怎么生成树型

发表于:2024-09-29 作者:千家信息网编辑
千家信息网最后更新 2024年09月29日,这篇文章主要介绍了redis怎么生成树型的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis怎么生成树型文章都会有所收获,下面我们一起来看看吧。一般为了方便管理 re
千家信息网最后更新 2024年09月29日redis怎么生成树型

这篇文章主要介绍了redis怎么生成树型的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇redis怎么生成树型文章都会有所收获,下面我们一起来看看吧。

一般为了方便管理 redis 缓存,我们通过 : 来分隔不同的 key 来进行存储缓存,这样方便查看。

例如:

game:upload_role:1000game:member_info:2000game: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 来显示了。

关于"redis怎么生成树型"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"redis怎么生成树型"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

0