中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

玩轉Redis-Redis高級數據結構及核心命令-ZSet

發布時間:2020-07-16 23:35:14 來源:網絡 閱讀:865 作者:Java_老男孩 欄目:編程語言

本文更適合用于復習總結,閱讀》實戰》閱讀 更有效果喲,主要包含以下內容:

玩轉Redis-Redis高級數據結構及核心命令-ZSet

  • Sorted Set(有序集合);
  • String(字符串);
  • List(列表);
  • Set(集合);
  • Hash(散列);

文章思路:

  • 數據結構應用場景及注意事項;
  • 數據結構各命令對比分析;

異常統一說明:
error(out of range)導圖簡寫@EOOR;
負數偏移量表示倒數第幾,導圖簡寫@LBN(last but number);


1、ZSet應用場景及注意事項

1.1、ZSet應用場景

??ZSet主要適用于需要?排序(排行榜)?的場景,如:

  • 粉絲列表(按關注時間排序);
  • 學生成績排名;
  • 文章帖子排名;
  • 各類榜單(如微博總熱榜、分類熱榜);

1.2、ZSet注意事項

  • ZSet具備唯一性、有序性:類似Java的SortedSet和HashMap的結合體;
  • 底層結構:跳躍列表;
  • setvalue唯一;setvalue有score屬性,按此排序;score越小排名越靠前
  • 最后一個value被移除后,數據結構自動刪除,內存被回收;

    • *

2、ZSet各命令對比分析

概述:

  • ZSet命令支持以下操作類型:增加、統計、查詢、刪除/彈出;
  • 命令中的lex為lexicographical(ordering),表示按字典規則排序;
  • ZSet參數正負無窮大表示:分數(+inf、-inf);字典排序(+、-);

2.1、ZSet增加與統計

【核心命令】
  • 增加【ZADD、ZINCRBY】;
  • 統計數量【ZCARD、ZCOUNT、ZLEXCOUNT】;
  • 集合運算【ZUNIONSTORE、ZINTERSTORE】;
注意:
  • 【ZADD】支持新增、更新數據:XX存在才更新分數;INCR增減分數;
  • 【ZINCRBY】increment避免使用浮點數,結果易出錯;
  • 【ZCARD、ZCOUNT、ZLEXCOUNT】統計集合(所有、指定分數區間、指定元素區間)元素個數;
  • 【ZUNIONSTORE、ZINTERSTORE】多個集合并集、交集運算;
Redis-ZSet增加與統計元素操作】命令簡述:
命令 功能 參數
ZADD 添加元素及分數到有序集合 key [NX XX] [CH] [INCR] score member [score member ...]
ZINCRBY 增加/減少分數 key increment member
ZCARD 統計有序集合的元素個數 key
ZCOUNT 統計指定【score區間】的元素個數 key min max
ZLEXCOUNT 統計指定【元素區間】的元素個數 key min max
ZINTERSTORE 計算指定有序集的【交集】并將結果存入目標集合 destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM MIN MAX]
ZUNIONSTORE 計算指定有序集的【并集】并將結果存入目標集合 destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM MIN MAX]
【Redis-ZSet增加與統計元素操作】命令詳細對比分析如下:

玩轉Redis-Redis高級數據結構及核心命令-ZSet

2.2、ZSe查詢

【核心命令】
  • 查詢分數【ZSCORE】;
  • 查詢排名【ZRANK、ZREVRANK】;
  • 按排名排序查詢【ZRANGE、ZREVRANGE】;
  • 按字典順序排序查詢【ZRANGEBYLEX、ZREVRANGEBYLEX】;
  • 按分數排序查詢【ZRANGEBYSCORE、ZREVRANGEBYSCORE】;
  • 分頁迭代【ZSCAN】;
注意:
  • 【ZSCORE】可用于判斷集合中是否存在某元素;

  • 【ZRANK、ZREVRANK】查詢排名

    • 排名以0為基數計算;
    • 排序規則:按分數排序,分數相同按字典順序排序;
  • 【ZRANGE、ZREVRANGE】按排名查詢

    • 排序規則:分數從小到大/從大到小,相同分數按照字典排序;
    • 排序序號從0開始,負數表示末偏移量:0即第一個元素,-1即最后一個元素;
    • statr、stop均是閉區間,不支持開區間;
    • 返回空列表:start>集合總數 或者 start>stop;
  • 【ZRANGEBYLEX、ZREVRANGEBYLEX】按字典順序排序查詢

    • 【前提】對元素分數相同的集合排序;
      • 分數不同排序結可能不準;
      • 實測:先按分數排序,分數相同按字典排序;
    • 排序大小寫敏感;
    • 若分數相同,ZRANGEBYLEX myzset - +將返回整個集合的元素;
    • LIMIT:類似與SQL的SELECT LIMIT offset, count。
      • count為負,則返offset后的所有元素;
      • offset從0開始計算;
      • 若offset很大,則命令需遍歷整個集合定位offset,復雜度將增加到O(N);
    • 示例場景
      • 獲取指定電話號段,如181開頭的電話;
      • 獲取指定姓氏的人名,如李XX;
    • ZREVRANGEBYLEX:參數max在前min在后;
  • 【ZRANGEBYSCORE、ZREVRANGEBYSCORE】按分數排序查詢

    • 排序大小寫敏感;
    • 分數相同:按字典順序排序;
    • LIMIT:含義和ZRANGEBYLEX相同;
    • ZREVRANGEBYSCORE的結果:和ZRANGEBYSCORE排序結果完全相反;
【Redis-ZSe查詢】命令簡述:
命令 功能 參數
ZSCORE 查詢指定元素的score key member
ZRANK 查詢指定元素的【正序】排名 key member
ZREVRANK 查詢指定元素的【逆序】排名 key member
ZRANGE 查詢指定【排名區間】的元素(和分數) key start stop [WITHSCORES]
ZREVRANGE 【逆序】查詢指定【排名區間】的元素(和分數) 同【ZRANGE】
ZRANGEBYSCORE 查詢指定【分數區間】的元素 key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE 【逆序】查詢指定【分數區間】的元素 key max min [WITHSCORES] [LIMIT offset count]
ZSCAN 分頁遍歷有序集合 key cursor [MATCH pattern] [COUNT count]
【Redis-ZSe查詢】命令詳細對比分析如下:

玩轉Redis-Redis高級數據結構及核心命令-ZSet

玩轉Redis-Redis高級數據結構及核心命令-ZSet

2.3、ZSe刪除

【核心命令】
  • 刪除元素【ZREM、ZREMRANGEBYLEX、ZREMRANGEBYLEXBYRANK、ZREMRANGEBYSCORE】;
  • 彈出元素【ZPOPMAX、ZPOPMIN、BZPOPMAX、BZPOPMIN】;
注意:
  • 刪除元素支持刪除指定key,還支持按照字典順序、排名、分數刪除;
  • 【ZREMRANGEBYLEX】ZSet的所有元素Score必須相同,否則結果不準確;
  • 【ZREMRANGEBYRANK】按排名刪除元素。即使分數相同,排名肯定不同;
  • 【ZPOPMAX】移除并彈出分數最大的元素,如果分數相同,按字典順序降序排序;
  • 【BZPOPMAX】和【ZPOPMAX】的區別不僅僅在于阻塞彈出,還在于BZPOPMAX支持操作多個key;
【Redis-ZSe刪除】命令簡述:
命令 功能 參數
ZREM 刪除指定元素 key member [member ...]
ZREMRANGEBYLEX 刪除score完全相同集合中指定區間的元素 key min max
ZREMRANGEBYRANK 刪除指定排名區間的元素 key start stop
ZREMRANGEBYSCORE 移除指定score的元素 key min max
ZPOPMAX 【移除】并彈出count個分數最大的元素 key [count]
ZPOPMIN 【移除】并彈出count個分數最小的元素 key [count]
BZPOPMAX 【阻塞移除】并彈出count個分數最大的元素 key [key ...] timeout
BZPOPMIN 【阻塞移除】并彈出count個分數最小的元素 key [key ...] timeout
【Redis-ZSe刪除】命令詳細對比分析如下:

玩轉Redis-Redis高級數據結構及核心命令-ZSet

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建始县| 青铜峡市| 嫩江县| 任丘市| 定结县| 乌兰察布市| 黑龙江省| 垦利县| 武强县| 巨野县| 芒康县| 黎平县| 中江县| 东源县| 南昌县| 芮城县| 牟定县| 潜山县| 舟山市| 汾阳市| 丹巴县| 灯塔市| 宁强县| 霍州市| 社旗县| 普格县| 鲁甸县| 廊坊市| 保定市| 五河县| 上饶县| 新津县| 兴海县| 张家川| 射阳县| 始兴县| 冕宁县| 兴山县| 广德县| 桐乡市| 长子县|