欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis key命令key的儲存方式

 更新時(shí)間:2024年04月03日 11:18:28   作者:碼農(nóng)弓長先生  
這篇文章主要介紹了Redis key命令key的儲存方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Redis是目前使用比較廣泛的nosql數(shù)據(jù)庫,它也是一種基于key-value結(jié)構(gòu)的數(shù)據(jù)庫且支持多種數(shù)據(jù)類型,Redis中它的存儲是使用一張hash表用于存儲所有的key和對應(yīng)value的地址。

因此key的命令是我們必須要掌握的。

前項(xiàng)

數(shù)據(jù)準(zhǔn)備,首先我們先在redis中設(shè)置一些數(shù)據(jù)

arr1 =  beijing     
arr2 = shanghai   
arr3 = shenzhen 
arr4 = guangzhou
param1 = guangdong   
param2=hunan 
param3 = jiangxi 
param4 = hubei

Key命令使用

1. keys [pattern] 

查看當(dāng)前庫的key(*代表通配符)。

該命令慎用,keys命令會掃描所有key,由于redis的執(zhí)行是串行執(zhí)行,當(dāng)key過多時(shí)使用keys命令時(shí)會導(dǎo)致阻塞其他命令的執(zhí)行,從而導(dǎo)致redis服務(wù)的崩潰。

大多數(shù)生產(chǎn)使用redis時(shí)會將keys命令禁用。

keys *  查看所有的key

keys arr* 匹配以arr開頭的key

 

keys *guangzhou  匹配以guangzhou結(jié)尾的key 

keys param1  指定查看key為param1

 

2. exists [key . . .] 

判斷key是否存在,可以同時(shí)判斷多個(gè)key

exists arr1  判斷arr1 是否存在 返回1則存在 返回0則不存在

exists arr1 arr2 arr3 同時(shí)判斷arr1 arr2 arr3 是否存在 匹配到n個(gè)key則返回n

如果都不存在則返回0

 

 

3. type key

查看key的類型,只能支持單個(gè)判斷

4. del [key . . .]

刪除指定的key 刪除n個(gè)key 則返回n   

unlink [key . . .]異步刪除

 

5. exprie key [second]

設(shè)置key的過期時(shí)間

6. ttl key

查看key還剩多少時(shí)間過期,數(shù)字代表剩下多少秒, -2 代表已過期, -1 代表永不過期

 

7. dbsize 

查看當(dāng)前key的數(shù)量

Key的存儲

redis中對key的存儲使用的是一張全局的hashtable來存儲,將每個(gè)key使用siphash函數(shù)生成一個(gè)64位的數(shù)字作為存儲在hashtable里的索引。

當(dāng)不同的鍵被落在同一個(gè)索引下時(shí),使用鏈表結(jié)構(gòu)來存儲。

如下圖:

漸進(jìn)式rehash

當(dāng)相同的索引鍵鏈表節(jié)點(diǎn)數(shù)過大,超過整個(gè)hashtable的數(shù)量時(shí),那么查找key的效率就會降低,因此redis則會對該全局hashtable進(jìn)行rehash的操作。

如果 key的數(shù)量過大時(shí)直接進(jìn)行rehash操作進(jìn)行擴(kuò)容時(shí)有可能會導(dǎo)致redis服務(wù)阻塞,因此redis則采用的是漸進(jìn)式的rehash操作。

漸進(jìn)式rehash的過程

redis在啟動時(shí)內(nèi)部默認(rèn)會分配兩個(gè)hashtable(ht0 、ht1),在正常使用時(shí)則使用其中一個(gè)ht0,當(dāng)需要進(jìn)行rehash操作時(shí)ht1才需要被使用到。

漸進(jìn)式rehash的操作步驟:

1、首先將原h(huán)t1的空間擴(kuò)容,讓ht1同時(shí)有ht0 和 ht1兩個(gè)哈希表的空間大小。

2、進(jìn)行rehash操作時(shí),在ht0中維護(hù)一個(gè)索引計(jì)數(shù)器 rehashidx , 并將它的值設(shè)置為 0 。

3、在rehash期間,當(dāng)執(zhí)行添加、刪除、查找或者更新操作時(shí),redis會將ht0 哈希表在 rehashidx 索引上的所有鍵值對 rehash 到 ht1,同時(shí)rehashidx 的值加1。

4、當(dāng)rehash的次數(shù)不斷增多時(shí),ht0的所有鍵值對都會被 rehash 至 ht1,此時(shí)rehashidx 屬性的值設(shè)為 -1 ,則代表rehash 操作已經(jīng)全部完成,那么ht1和ht0的位置進(jìn)行交換,前面提到的默認(rèn)操作都是在ht0上的。

總之

rehash操作主要是解決由于hash沖突導(dǎo)致key鏈表過大影響性能,而使用漸進(jìn)式rehash操作則是未來避免key數(shù)量過大因rehash導(dǎo)致redis服務(wù)的阻塞。

這些機(jī)制最終的目的都是為了能夠提高redis服務(wù)的性能。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Redis exists命令bug分析(案例詳解)

    Redis exists命令bug分析(案例詳解)

    Redis EXISTS 命令用于檢查給定 key 是否存在,本文重點(diǎn)給大家介紹Redis exists命令bug分析,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • redis的key出現(xiàn)的\xac\xed\x00\x05t\x00亂碼問題及解決

    redis的key出現(xiàn)的\xac\xed\x00\x05t\x00亂碼問題及解決

    這篇文章主要介紹了redis的key出現(xiàn)的\xac\xed\x00\x05t\x00亂碼問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 同一份數(shù)據(jù)Redis為什么要存兩次

    同一份數(shù)據(jù)Redis為什么要存兩次

    這篇文章主要介紹了同一份數(shù)據(jù)Redis為什么要存兩次,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • SpringBoot 開啟Redis緩存及使用方法

    SpringBoot 開啟Redis緩存及使用方法

    用redis做緩存,是因?yàn)閞edis有著很優(yōu)秀的讀寫能力,在集群下可以保證數(shù)據(jù)的高可用,那么今天通過本文給大家講解下SpringBoot使用Redis的緩存的方法,感興趣的朋友一起看看吧
    2021-08-08
  • Redis數(shù)據(jù)庫原理深入刨析

    Redis數(shù)據(jù)庫原理深入刨析

    在之前的文章我們介紹過,Redis服務(wù)器在啟動之初,會初始化RedisServer的實(shí)例,在這個(gè)實(shí)例中存在很多重要的屬性結(jié)構(gòu),同理本篇博客中介紹的數(shù)據(jù)庫實(shí)現(xiàn)原理也會和其中的某些屬性相關(guān),我們繼續(xù)看一下吧
    2022-11-11
  • Redis教程(十二):服務(wù)器管理命令總結(jié)

    Redis教程(十二):服務(wù)器管理命令總結(jié)

    這篇文章主要介紹了Redis教程(十二):服務(wù)器管理命令總結(jié),本文講解了CONFIGGETparameter、CONFIG SETparameter value、FLUSHALL等命令,需要的朋友可以參考下
    2015-04-04
  • redis中token失效引發(fā)的一次生產(chǎn)事故

    redis中token失效引發(fā)的一次生產(chǎn)事故

    項(xiàng)目再測試的時(shí)候發(fā)現(xiàn)不定時(shí)token失效,本文主要介紹了redis中token失效引發(fā)的一次生產(chǎn)事故,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Redis實(shí)現(xiàn)和數(shù)據(jù)庫的數(shù)據(jù)同步

    Redis實(shí)現(xiàn)和數(shù)據(jù)庫的數(shù)據(jù)同步

    本文介紹了Redis與傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)同步的幾種常見方法,包括CacheAside、WriteThrough、WriteBehind,以及如何通過分布式事務(wù)、樂觀鎖、數(shù)據(jù)過期策略和消息隊(duì)列來解決數(shù)據(jù)一致性問題,每種方法都有其適用場景和優(yōu)缺點(diǎn),需要根據(jù)具體需求進(jìn)行選擇
    2025-01-01
  • Spring?Boot?3.0x的Redis?分布式鎖的概念和原理

    Spring?Boot?3.0x的Redis?分布式鎖的概念和原理

    Redis?分布式鎖是一種基于?Redis?的分布式鎖解決方案,它的原理是利用?Redis?的原子性操作實(shí)現(xiàn)鎖的獲取和釋放,從而保證共享資源的獨(dú)占性,這篇文章主要介紹了適合?Spring?Boot?3.0x的Redis?分布式鎖,需要的朋友可以參考下
    2024-08-08
  • Redis 事務(wù)知識點(diǎn)相關(guān)總結(jié)

    Redis 事務(wù)知識點(diǎn)相關(guān)總結(jié)

    這篇文章主要介紹了Redis 事務(wù)相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用Redis,感興趣的朋友可以了解下
    2021-03-03

最新評論