您好,登錄后才能下訂單哦!
這篇文章主要介紹了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 '<pre>'; print_r($result);
這樣生成的結果,通過json_encode就可以使用 zTree 來顯示了。
關于“redis怎么生成樹型”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“redis怎么生成樹型”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。