1. 程式人生 > >Redis快取樹形結構

Redis快取樹形結構

 例如現有如下樹形結構:

id

name

path

root

Root

''

1

Node1

'root/'

11

Node11

'root/1/'

111

Node111

'root/1/11/'

112

Node112

'root/1/11/'

12

Node12

'root/1/'

2

Node2

'root/'

21

Node21

'root/2/'

211

Node211

'root/2/21'

22

Node22

'root/2/'

現採用redis快取如上資料,方案為使用hash快取具體節點資訊,使用set快取節點的子節點資訊。如下:

1. 先快取節點資訊:key:tree:{id}  value:屬性值

hmset tree:root name "Root" path ''

hmset tree:1 name "Node1" path 'root/'

hmset tree:11 name "Node11" path 'root/1/'

hmset tree:111 name "Node111" path 'root/1/11/'

hmset tree:112 name "Node121" path 'root/1/11/'

hmset tree:12 name "Node12" path 'root/1/'

hmset tree:2 name "Node2" path 'root/'

hmset tree:21 name "Node21" path 'root/2/'

hmset tree:211 name "Node211" path 'root/2/21/'

hmset tree:22 name "Node22" path 'root/2/'

2. 然後快取節點的子節點id  tree:{parentId}:heirs value: {childId}

sadd tree:root:heirs 1     //id為root的子節點有1,11,111,112,12,2,21,211,22

sadd tree:root:heirs 11

sadd tree:root:heirs 111

sadd tree:root:heirs 112

sadd tree:root:heirs 12

sadd tree:root:heirs 2

sadd tree:root:heirs 21

sadd tree:root:heirs 211

sadd tree:root:heirs 22



sadd tree:1:heirs 11    //id為1的子節點有11,111,112,12

sadd tree:1:heirs 111

sadd tree:1:heirs 112

sadd tree:1:heirs 12

...

3. 在redis內查詢節點個數

scard tree:root:heris

4. 根據id查詢子節點

sort tree:root:heirs get # get tree:*->name get tree:*->path

獲取到的是List<String>集合,需要解析

如果需要排序,需要加上在節點加上排序欄位orderBy

sort tree:root:heirs by orderBy get # get tree:*->name get tree:*->path

5. 新增節點

例如我們要在節點Node21下再新增加一個子節點Node212,redis操作步驟如下:

① 先增加節點資訊:id:212  name:Node212  path:'root/2/21/'

hmset tree:212 name "Node212" path 'root/2/21/'

② 再在節點Node21下新增子節點

sadd tree:root:heirs  212         Node212是Root的子節點

sadd tree:2:heirs  212            Node212是Node2的子節點

sadd tree:21:heirs  212           Node212是Node21的子節點

6.刪除子節點

如何刪除一個子節點呢?例如我們要刪除子節點Node111的話,有如下步驟:

① 先檢查該節點是否存在子節點

smembers tree:111:heirs    //沒有子節點

② 然後刪除上級節點的引用

hmget tree:111 path        //先獲取Node111節點的路徑   root/1/11/

srem tree:root:heirs 111   //然後根據節點id刪除上級節點的引用

srem tree:1:heirs 111

srem tree:11:heirs 111

③ 最後刪除自己

del tree:111

總結:此種方案不適合對樹形結構查詢。

相關推薦

Redis快取樹形結構

 例如現有如下樹形結構: id name path root Root '' 1 Node1

從程式碼結構優化redis快取的方式, 還在為多人開發專案時混亂的redis key煩惱嘛?

我們目前資料層次按照效能來分    頂層 : redis     中間層: es     底層: mysql 目前針對一些比較繁瑣棘手的, 但是可以花點時間

.Net Core使用分散式快取Redis:資料結構

一、前言 本篇主要使用StackExchangeRedis在.Net Core中使用Redis,使用基礎見:點選此處。 二、五種基礎資料結構 1.字串型別String 字串型別是Redis中最基本的資料型別,它能儲存任何形式的字串,包括二進位制資料。你可以用其儲存使用者的郵箱、JSON化的物件甚至是一張圖片。

javaproject積累——樹形結構的操作

lec 全部 pre 經歷 -c 希望 oot div nbsp 近期一直被樹形結構整的非常頭大,又是遞歸。又是循環。可是,好在我們在經歷了千辛萬苦後。最終弄出來了。事實上就是組織機構的常規操作,有些是我們過度設計。有些是我們想錯了。而對數的邏輯讀取,我

Redis 數據結構之dict(2)

value ash 每次 earch 定義 索引 user popu adding 本文及後續文章,Redis版本均是v3.2.8 上篇文章《Redis 數據結構之dict》,我們對dict的結構有了大致的印象。此篇文章對dict是如何維護數據結構的做個詳細的理解

Redis數據結構(四)

方式 lpush alt 擴展 操作 art 中間 star range 存儲list: list存儲方式采用頭和尾插入的方式,這樣效率快,如果沒有這個插入的數據,redis自己會創建這個數據,如果是中間插入的話,采用list方式效率就會很慢。 ArrayList

sqlite3樹形結構遍歷效率對照測試

效果 fcm 技術 art 一個點 解析 got log 創建數據庫 sqlite3樹形結構遍歷效率對照測試 一、緣起 項目數據結構:本人從事安防行業,視頻監控領域。項目中會遇到監控點位的組織機構劃分、暫時劃分的巡邏點位等。這些相機點位、連同組織機構,它們在邏輯

下拉列表樹形結構

urn value || 下拉 tco pan out 樹形結構 options 上級菜單<select id="cc" class="easyui-combotree" style="width:223px;" name=‘parentid‘ da

redis數據結構

ret 版權 ber copy link return rep origin 基本配置 redis保存數據的幾種類型 標簽: javaredis 2016-09-20 16:18 4010人閱讀 評論(0) 收藏 舉報 分類: java(13) 版權聲明

Redis 數據結構服務器

持久化 其他 sts .com hash key-value blog bsp 安裝 Redis 簡介 Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。 Redis 與其他 key - value 緩存產品有以下三個特點: Red

Jquery EasyUI Tree樹形結構的Java實現(實體轉換VO)

優勢 con control 項目 util turn ttr real org 前一陣做的OA項目,有一個是組織架構的樹,因為是分開做的,我做的是Controller和頁面,其他組做的Service和Dao,因為之前一直沒有商量頁面用什麽框架做比較好,導致,Dao層取出來

使用postgre數據庫實現樹形結構表的子-父級叠代查詢,通過級聯菜單簡單舉例

with 兼容 rep blank 增刪改 結果 關系型 mssq word 前言:開發常用的關系型數據庫MySQL,mssql,postgre,Oracle,簡單的增刪改查的SQL語句都與標準SQL兼容,這個不用講,那麽對於叠代查詢(不嚴格的叫法:遞歸查詢)每種數據庫都不

easyui中的下拉菜單是樹形結構時如何實現onchange方法

問題 input style 出現 發現 class 如果 box ble 今天碰到一個問題就是我寫的代碼中的一個下拉列表顯示的是樹型菜單,代碼如下(使用的是easyui): .... <tr> <td>地區:</td>

Eclipse/MyEclipse項目中包以樹形結構顯示

sent logs flat 完整 樹形結構 樹形 blog height lips 在Package Explore窗口右上邊的小三角那裏進去菜單"Package Prensentation", 選第一個Flat是顯示完整的包名,第二個Hierachical顯示的是樹形結

redis 數據結構基礎 (二) 鏈表

ear 數據結構 dup 設計 pty ndt 萬能 div 語言 redis中的鏈表恐怕是最簡單的數據結構了,redis鏈表中總共有3個數據結構: listNode: 1 typedef struct listNode { 2 struct listNode *

linux tree命令以樹形結構顯示文件目錄結構

article ref winscp linu 傳遞 href 顯示文件 nbsp tree http://jingyan.baidu.com/article/acf728fd19c7eff8e510a3eb.html winscp 傳遞文件到ubuntu上用w

添加json屬性並賦值或修改json屬性(ztree樹形結構)

items length [] box poi 修改 item sub amp var data=[ {accounts :[], attrs : {maxmailboxsize: "-1", maxusers: "-1"}, fullpa

TreeList 用含有樹形結構的數據源綁定顯示

反射對象屬性 構建datatable 綁定 treelist目的很明確,直接貼代碼(反射一個對象,將屬性存入DataTable中綁定顯示): public static DataTable CreateDataTabele( object obj) {

django-樹形結構

樹形 賦值 list comm ren 菜單 nbsp for 結構 樹形結構:首先是構造一種層級關系,主要用於層級菜單,或是一種遞進的情況.例:下面是一種層級關系,Pid字段後面的數字,指定的就是id數字的子層級.Pid等於None是根目錄.comment_list

關於idea新建子目錄時往父目錄名字後疊加而不是樹形結構的解決方法(轉)

選中 ack == 我們 click ont src post cli 我們在IDEA中創建子目錄時,子目錄總是在父目錄後面疊加而不是樹形,如下 我們可以打開項目窗口的