<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 2.7.7 有序集合對象(zset) 有序集合對象的編碼(encoding)可以是`ziplist`、 `skipist` 當有序集合對象同時滿足以下兩個條件時,使用ziplist編碼,否則使用skiplist編碼: - 所有元素長度小于64字節(可以通過`zset-max-ziplist-value`設置) - 元素數量小于128個(可以通過`zset-max-ziplist-entries`設置) ---- skiplist編碼的對象使用zset作為底層數據結構: ```c typedef struct zset { zskiplist *zsl; dict *dict; }; ``` - zsl中按分值c從小到大排列了所有元素,可以對集合進行范圍操作:ZRANK、ZRANGE等 - dict為所有元素創建了一個從成員到分值的映射,程序可以用O(1)的復雜度根據成員查找分值等,如ZSCORE - 通過指針共享相同元素 ---- ```c redis> ZADD price 8.5 apple 5.0 banana 6.0 cherry (integer) 3 ``` 如果price鍵使用ziplist編碼,則其值對象如下所示: ``` redisObject type: REDIS_ZSET encoding: REDIS_ENCODING_ZIPLIST ptr -> ziplist: { zlbytes, zltail, zllen,"banana", 5.0, "cherry", 6.0, "apple", 8.5, zlend } ... ``` 如果price鍵使用skiplist編碼,則其值對象如下所示: ``` redisObject type: REDIS_ZSET encoding: REDIS_ENCODING_SKIPLIST ptr -> zset: { dict: { dict, ..., h[0]: { dictht, ..., table: { (stringObject:"banana") -> 5.0 (stringObject:"apple") -> 8.5 (stringObject:"cherry") -> 6.0 }, ... },... }, zsl: { (header: ...), (tail: ...), (level: 5), (length: 3) } } ... ``` ---- 有序集合命令的實現: 命令 | ziplist的實現 | skiplist的實現 ---- | ---- | ---- ZAdd | 調用ziplistInsert函數,將成員和分值作為兩個結點分別插入到壓縮列表 | 先調用zslInsert函數插入跳躍表,再調用dictAdd函數插入到字典 ZCard | 調用ziplistLeng函數,將結果除以2后返回 | 返回跳躍表的length屬性 ZCount | 遍歷壓縮列表,統計分值在給定范圍內的結點數量 | 遍歷跳躍表,統計分值在給定范圍內的結點數量 ZRange | 從表頭到表尾遍歷壓縮列表,返回給定索引范圍內的所有元素 | 從表頭到表尾遍歷跳躍表,返回給定索引范圍內的所有元素 ZRevRange | 從表尾到表頭遍歷壓縮列表,返回給定索引范圍內的所有元素 | 從表尾到表頭遍歷跳躍表,返回給定索引范圍內的所有元素 ZRank | 從表頭到表尾遍歷壓縮列表,查找指定元素,返回途徑結點數,即排位 | 從表頭到表尾遍歷跳躍表,查找指定元素,返回途徑結點數,即排位 ZRevRank | 從表尾到表頭遍歷壓縮列表,查找指定元素,返回途徑結點數,即排位 | 從表尾到表頭遍歷跳躍表,查找指定元素,返回途徑結點數,即排位 ZRem | 遍歷壓縮列表,刪除所有包含給定成員的結點,及其下一個值結點 | 遍歷跳躍表,刪除所有包含了給定成員的跳躍表結點,并在字典中解除被刪除元素的成員和值的關聯 ZScore | 遍歷壓縮列表,查找指定成員結點,取出其下一個結點即值結點 | 直接在字典中取出給定成員所對應的值
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看