最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis中Scan命令的基本使用教程

 更新時間:2019年06月02日 09:42:35   投稿:daisy  
這篇文章主要給大家介紹了關(guān)于Redis中Scan命令的基本使用教程,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用Redis具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧

前言

Redis中有一個經(jīng)典的問題,在巨大的數(shù)據(jù)量的情況下,做類似于查找符合某種規(guī)則的Key的信息,這里就有兩種方式,
一是keys命令,簡單粗暴,由于Redis單線程這一特性,keys命令是以阻塞的方式執(zhí)行的,keys是以遍歷的方式實現(xiàn)的復(fù)雜度是 O(n),Redis庫中的key越多,查找實現(xiàn)代價越大,產(chǎn)生的阻塞時間越長。

二是scan命令,以非阻塞的方式實現(xiàn)key值的查找,絕大多數(shù)情況下是可以替代keys命令的,可選性更強

以下寫入100000條key***:value***格式的測試數(shù)據(jù)(ps:用pipline的話,1w一筆,每一筆在秒級完成)

# -*- coding: utf-8 -*-
# !/usr/bin/env python3
import redis
import sys
import datetime

def create_testdata():
 r = redis.StrictRedis(host='***.***.***.***', port=****, db=0, password='root')
 counter = 0
 with r.pipeline(transaction=False) as p:
 for i in range(0, 100000):
  p.set('key' + str(i), "value" + str(i))
  counter = counter + 1
  if (counter == 10000):
  p.execute()
  counter = 0
  print("set by pipline loop")

if __name__ == "__main__":
 create_testdata()

比如這里查詢key111開頭的key有哪些?

若使用keys命令,則執(zhí)行keys key1111*,一次性全部查出來。

同樣,如果使用scan命令,則用scan 0 match key1111* count 20

scan的語法為:SCAN cursor [MATCH pattern] [COUNT count]The default COUNT value is 10.

SCAN命令是一個基于游標的迭代器。這意味著命令每次被調(diào)用都需要使用上一次這個調(diào)用返回的游標作為該次調(diào)用的游標參數(shù),以此來延續(xù)之前的迭代過程。

這里使用scan 0 match key1111* count 20命令來完成這個查詢,稍顯意外的是,使用一開始都沒有查詢到結(jié)果,這個要從scan命令的原理來看。

scan在遍歷key的時候,0就代表第一次,key1111*代表按照key1111開頭的模式匹配,count 20中的20并不是代表輸出符合條件的key,而是限定服務(wù)器單次遍歷的字典槽位數(shù)量(約等于)。

那么,什么又叫做槽的數(shù)據(jù)?這個槽是不是Redis集群中的slot?答案是否定的。其實上圖已經(jīng)給出了答案了。

如果上面說的“字典槽”的數(shù)量是集群中的slot,又知道集群中的slot數(shù)量是16384,那么遍歷16384個槽之后,必然能遍歷出來所有的key信息,上面清楚地看到,當遍歷的字典槽的數(shù)量20000的時候,游標依舊沒有走完遍歷結(jié)果,因此這個字典槽并不等于集群中的slot的概念。

經(jīng)過測試,在scan的時候,究竟遍歷多大的COUNT值能完全match到符合條件的key,跟具體對象的key的個數(shù)有關(guān),
如果以超過key個數(shù)的count來scan,必定會一次性就查找到所有符合條件的key,比如在key個數(shù)為10W個的情況下,一次遍歷20w個字典槽,肯定能完全遍歷出來結(jié)果。

scan 指令是一系列指令,除了可以遍歷所有的 key 之外,還可以對指定的容器集合進行遍歷。

zscan 遍歷 zset 集合元素,

hscan 遍歷 hash 字典的元素、

sscan 遍歷 set 集合的元素。

SSCAN 命令、 HSCAN 命令和 ZSCAN 命令的第一個參數(shù)總是一個數(shù)據(jù)庫鍵(某個指定的key)。

另外,使用redis desktop manager的時候,當刷新某個庫的時候,控制臺自動不斷刷新scan命令,也就知道它在干嘛了

參考:http://jinguoxing.github.io/redis/2018/09/04/redis-scan/

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Redis禁用命令、危險命令及規(guī)避方法

    Redis禁用命令、危險命令及規(guī)避方法

    這篇文章主要介紹了Redis禁用命令、危險命令及規(guī)避方法,本文介紹了個非常致命的兩個命令以及用配置文件禁用這些命令的方法,需要的朋友可以參考下
    2015-06-06
  • redis主從復(fù)制原理的深入講解

    redis主從復(fù)制原理的深入講解

    這篇文章主要給大家介紹了關(guān)于redis主從復(fù)制原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用redis具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧
    2019-04-04
  • 基于Redis位圖實現(xiàn)系統(tǒng)用戶登錄統(tǒng)計

    基于Redis位圖實現(xiàn)系統(tǒng)用戶登錄統(tǒng)計

    這篇文章主要介紹了基于Redis位圖實現(xiàn)系統(tǒng)用戶登錄統(tǒng)計,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-11-11
  • Redis實現(xiàn)登錄注冊的示例代碼

    Redis實現(xiàn)登錄注冊的示例代碼

    本文主要介紹了Redis實現(xiàn)登錄注冊的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-06-06
  • springmvc集成使用redis過程

    springmvc集成使用redis過程

    這篇文章主要介紹了springmvc集成使用redis過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Redis?布隆過濾器命令的使用詳解

    Redis?布隆過濾器命令的使用詳解

    這篇文章主要介紹了Redis?布隆過濾器的相關(guān)命令的使用,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • redis 實現(xiàn)登陸次數(shù)限制的思路詳解

    redis 實現(xiàn)登陸次數(shù)限制的思路詳解

    這篇文章主要介紹了redis 實現(xiàn)登陸次數(shù)限制的思路詳解,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • 分割超大Redis數(shù)據(jù)庫例子

    分割超大Redis數(shù)據(jù)庫例子

    這篇文章主要介紹了分割超大Redis數(shù)據(jù)庫例子,本文講解了分割的需求、分割的思路及分割實例,需要的朋友可以參考下
    2015-03-03
  • springboot中redis并發(fā)鎖的等待時間設(shè)置長短的方法

    springboot中redis并發(fā)鎖的等待時間設(shè)置長短的方法

    在SpringBoot應(yīng)用中,Redis鎖的等待時間設(shè)置不當可能導(dǎo)致資源浪費、響應(yīng)時間增加、死鎖風險升高、系統(tǒng)負載增加、業(yè)務(wù)邏輯延遲以及故障恢復(fù)慢等問題,建議合理設(shè)置等待時間,并考慮使用其他分布式鎖實現(xiàn)方式提高性能
    2024-10-10
  • Redis?sentinel哨兵集群的實現(xiàn)步驟

    Redis?sentinel哨兵集群的實現(xiàn)步驟

    本文主要介紹了Redis?sentinel哨兵集群的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-07-07

最新評論

桂平市| 凤翔县| 建德市| 金塔县| 左云县| 西林县| 嘉兴市| 昌黎县| 凤凰县| 天镇县| 黄梅县| 桓仁| 祁阳县| 西乡县| 新安县| 化州市| 昌江| 揭西县| 涟源市| 南充市| 宿州市| 吉水县| 金门县| 三穗县| 汕尾市| 漯河市| 山东| 卢氏县| 深州市| 长沙市| 绍兴县| 罗城| 大英县| 凤凰县| 涞水县| 恩平市| 霍城县| 武义县| 舞钢市| 万州区| 元江|