日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis - 使用scan代替keys与hgetall操作

發布時間:2023/12/14 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis - 使用scan代替keys与hgetall操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.scan前言

當我們使用 keys * 或 hgetall 進行查詢的時候會進行堵塞,導致 redis 整體不可用(因為redis是單線程的),而使用 scan 命令則不會。

從Redis v2.8開始,SCAN命令已經可用,它允許使用游標從keyspace中檢索鍵。
對比KEYS命令,雖然SCAN無法一次性返回所有匹配結果,但是卻規避了阻塞系統這個高風險,從而也讓一些操作可以放在主節點上執行。

2.SCAN相關命令

  • SCAN相關命令包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令,分別用于集合、哈希鍵及有序集等
  • SCAN 命令用于迭代當前數據庫中的數據庫鍵。
  • SSCAN 命令用于迭代集合鍵中的元素。
  • HSCAN 命令用于迭代哈希鍵中的鍵值對。
  • ZSCAN 命令用于迭代有序集合中的元素(包括元素成員和元素分值)。
  • 因為 SCAN 、 SSCAN 、 HSCAN 和 ZSCAN 四個命令的工作方式都非常相似, 要記住:SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一個參數總是一個數據庫鍵。而 SCAN 命令則不需要在第一個參數提供任何數據庫鍵 —— 因為它迭代的是當前數據庫中的所有數據庫鍵。

    ?

    3.基本用法:

    命令格式:

    SCAN cursor [MATCH pattern] [COUNT count]


    命令解釋:scan 游標 MATCH <返回和給定模式相匹配的元素> count 每次迭代所返回的元素數量


    SCAN命令是增量的循環,每次調用只會返回一小部分的元素。所以不會有KEYS命令的坑(key的數量比較多,一次KEYS查詢會block其他操作)。 ?
    SCAN命令返回的是一個游標,從0開始遍歷,到0結束遍歷。
    通過scan中的MATCH <pattern> 參數,可以讓命令只返回和給定模式相匹配的元素,實現模糊查詢的效果

    示例: scan 0 match DL* count 5 sscan myset 0 match f*

    f

    返回值解釋:

    SCAN 命令、 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都返回一個包含兩個元素的 multi-bulk 回復

    • 回復的第一個元素是字符串表示的無符號 64 位整數(游標)
    SCAN 命令每次被調用之后, 都會向用戶返回一個新的游標, 用戶在下次迭代時需要使用這個新游標作為 SCAN 命令的游標參數, 以此來延續之前的迭代過程。 當 SCAN 命令的游標參數被設置為 0 時, 服務器將開始一次新的迭代, 而當服務器向用戶返回值為 0 的游標時, 表示迭代已結束。
    • 回復的第二個元素是另一個 multi-bulk 回復
    這個 multi-bulk 回復包含了本次被迭代的元素。

    4、注意

    SCAN命令不能保證每次返回的值都是有序的,另外同一個key有可能返回多次,不做區分,需要應用程序去處理。

    SCAN 命令返回的每個元素都是一個數據庫鍵。
    SSCAN 命令返回的每個元素都是一個集合成員。
    HSCAN 命令返回的每個元素都是一個鍵值對,一個鍵值對由一個鍵和一個值組成。
    ZSCAN 命令返回的每個元素都是一個有序集合元素,一個有序集合元素由一個成員(member)和一個分值(score)組成。

    5、Jedis實現

    /*** @Description: 實現hscan dowhile形式* @Author: zongx* @Date: 2020/3/6* @Param: pattern* @return java.util.List<java.lang.String>*/public Map<String,String> hscan(final String key,final String pattern) {return execute(new JedisAction<Map<String,String>>() {@Overridepublic Map<String, String> action(Jedis jedis) {// 游標初始值為0String cursor = ScanParams.SCAN_POINTER_START;ScanParams scanParams = new ScanParams();scanParams.match(pattern);scanParams.count(Integer.MAX_VALUE);Map<String, String> results = new HashedMap();do {ScanResult<Map.Entry<String, String>> hscanResult =jedis.hscan(key, String.valueOf(cursor), scanParams);for (Map.Entry<String, String> en : hscanResult.getResult()) {results.put(en.getKey(),en.getValue());}//獲取游標位置,若大于0,則代表還有數據,需要繼續迭代cursor = hscanResult.getStringCursor();} while (Integer.parseInt(cursor) > 0);return results;}});}/***scan,while形式* @param pattern* @param count* @return*/public List<String> scan(final String pattern, final int count) {return execute(new JedisAction<List<String>>() {@Overridepublic List<String> action(Jedis jedis) {ScanParams params = new ScanParams();params.match(pattern);params.count(count);String cursor = "0";List<String> results = new ArrayList<>();while (true) {ScanResult scanResult = jedis.scan(cursor, params);List<String> elements = scanResult.getResult();if (elements != null && elements.size() > 0) {results.addAll(elements);}cursor = scanResult.getStringCursor();if ("0".equals(cursor)) {break;}}return results;}});}

    代碼還可以參考:

    https://www.xttblog.com/?p=3635

    工具類在下載中心可以下載

    總結

    以上是生活随笔為你收集整理的Redis - 使用scan代替keys与hgetall操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 在线观看福利网站 | 老师张开让我了一夜av | 国产精品卡一 | 日韩精品高清视频 | 日韩h视频| 久久久久久亚洲精品 | 北条麻妃一区二区三区四区五区 | 亚洲精品在线观看av | 人人看人人爽 | 日韩欧美精品在线播放 | 91亚洲国产成人精品一区二三 | 亚洲8888 | 欧美激情在线播放 | 国产精品福利在线播放 | 人妻饥渴偷公乱中文字幕 | 青青草91久久久久久久久 | 精品国产一区二区三区久久久蜜月 | 极品尤物一区二区 | 亚洲视频入口 | 天天天av | av网站免费在线看 | 我要色综合天天 | 亚洲制服一区二区 | 欧美自拍一区 | 欧美日韩99 | 素人av在线 | 超级碰在线视频 | 亚洲天堂资源在线 | 国产伦精品视频一区二区三区 | 午夜免费福利视频 | 少妇激情四射 | 视频在线观看一区二区三区 | 又大又长粗又爽又黄少妇视频 | 丰满尤物白嫩啪啪少妇 | 久久久久久久久99 | 青青国产在线观看 | 国产精品99精品无码视亚 | 91香草视频| 亚洲国产成人在线观看 | 亚洲中文字幕一区二区在线观看 | 4444亚洲人成无码网在线观看 | 激情五月在线观看 | 亚洲av成人精品一区二区三区在线播放 | 岳奶大又白下面又肥又黑水多 | 婷婷亚洲激情 | 日韩成人高清视频在线观看 | 中文字幕乱码亚洲精品一区 | 欧美成人国产 | 国产极品一区 | 黄页网站视频在线观看 | 国产肥老妇视频 | 樱花草av | 少妇被爽到高潮动态图 | 欧美色图亚洲天堂 | 久久久中文字幕 | 五月婷婷综合网 | 日韩一区二区精品 | 欧洲做受高潮欧美裸体艺术 | 蜜臀久久精品久久久久久酒店 | 综合色播 | 国产精品久久久久久妇女 | 久久一级电影 | 国产成人无码性教育视频 | 色吊丝一区二区 | 日日插插 | 国产又粗又猛又黄视频 | 日本中文字幕影院 | 在线免费视频一区二区 | 日本三级中国三级99人妇网站 | 99热都是精品 | www成人免费视频 | 在线观看精品国产 | 综合久久国产 | 国产一级视频在线播放 | 国产精品嫩草影院av蜜臀 | 美国免费黄色片 | a天堂视频 | 国精产品一品二品国精品69xx | 看国产一级片 | 91免费在线 | 久草视频2| 久久天堂影院 | 国产一区二区久久精品 | 动漫裸体无遮挡 | 中文字幕在线观看高清 | 99香蕉网| 日韩成人高清 | 99re8在线精品视频免费播放 | 久草免费在线视频观看 | 毛片毛片毛片毛片毛片 | 亚洲а∨天堂久久精品2021 | 国产一二三四五区 | 1024金沙人妻一区二区三区 | 欧美又粗又深又猛又爽啪啪九色 | 久久99精品久久久久久三级 | 中文在线日韩 | 日韩毛片高清在线播放 | 成人三级图片 | 九色国产在线 |