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

Redis key命令key的儲存方式

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

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

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

前項

數(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過多時使用keys命令時會導(dǎo)致阻塞其他命令的執(zhí)行,從而導(dǎo)致redis服務(wù)的崩潰。

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

keys *  查看所有的key

keys arr* 匹配以arr開頭的key

 

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

keys param1  指定查看key為param1

 

2. exists [key . . .] 

判斷key是否存在,可以同時判斷多個key

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

exists arr1 arr2 arr3 同時判斷arr1 arr2 arr3 是否存在 匹配到n個key則返回n

如果都不存在則返回0

 

 

3. type key

查看key的類型,只能支持單個判斷

4. del [key . . .]

刪除指定的key 刪除n個key 則返回n   

unlink [key . . .]異步刪除

 

5. exprie key [second]

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

6. ttl key

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

 

7. dbsize 

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

Key的存儲

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

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

如下圖:

漸進(jìn)式rehash

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

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

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

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

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

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

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

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

4、當(dāng)rehash的次數(shù)不斷增多時,ht0的所有鍵值對都會被 rehash 至 ht1,此時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ù)的性能。

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

相關(guān)文章

  • Redis分布式限流生產(chǎn)環(huán)境落地方案

    Redis分布式限流生產(chǎn)環(huán)境落地方案

    本文主要介紹了Redis分布式限流生產(chǎn)環(huán)境落地方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • Redis中一個String類型引發(fā)的慘案

    Redis中一個String類型引發(fā)的慘案

    著存儲的數(shù)據(jù)量越來越大,Redis的內(nèi)存的使用量也快速上升,結(jié)果遇到了大內(nèi)存Redis實例因為生成RDB而響應(yīng)變慢的問題。很顯然String類型并不是一種好的選擇,那有什么辦法可以降低內(nèi)存消耗嗎?帶著這個問題一起通過本文學(xué)習(xí)下吧
    2021-07-07
  • Redis的數(shù)據(jù)過期策略和數(shù)據(jù)淘汰策略

    Redis的數(shù)據(jù)過期策略和數(shù)據(jù)淘汰策略

    本文主要介紹了Redis的數(shù)據(jù)過期策略和數(shù)據(jù)淘汰策略,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Redis實現(xiàn)分布式鎖全過程

    Redis實現(xiàn)分布式鎖全過程

    文章介紹Redis實現(xiàn)分布式鎖的方法,包括使用SETNX和EXPIRE命令確?;コ庑耘c防死鎖,Redisson客戶端提供的便捷接口,以及Redlock算法通過多節(jié)點(diǎn)共識提高容錯性,同時強(qiáng)調(diào)需合理設(shè)置鎖過期時間、唯一標(biāo)識,并注意網(wǎng)絡(luò)分區(qū)問題
    2025-08-08
  • Redis分布式鎖的10個坑總結(jié)

    Redis分布式鎖的10個坑總結(jié)

    日常開發(fā)中,經(jīng)常會碰到秒殺搶購等業(yè)務(wù),為了避免并發(fā)請求造成的庫存超賣等問題,我們一般會用到Redis分布式鎖,但是使用Redis分布式鎖,很容易踩坑哦,本文將給大家分析闡述,Redis分布式鎖的10個坑,需要的朋友可以參考下
    2023-05-05
  • Redis數(shù)據(jù)庫的鍵管理示例詳解

    Redis數(shù)據(jù)庫的鍵管理示例詳解

    這篇文章主要為大家介紹了Redis數(shù)據(jù)庫的鍵管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 解決Redis緩存擊穿問題(互斥鎖、邏輯過期)

    解決Redis緩存擊穿問題(互斥鎖、邏輯過期)

    本文介紹了背景緩存擊穿問題及兩種常見解決方案:互斥鎖與邏輯過期,互斥鎖通過獲取鎖來確保數(shù)據(jù)最新,但響應(yīng)速度慢,可能有死鎖風(fēng)險,邏輯過期利用過期字段判斷緩存是否過期,提高性能但不保證一致性,需要額外內(nèi)存,通過JMeter測試,兩種方案都能有效緩解緩存擊穿問題
    2026-02-02
  • Redis高效安全的遍歷所有key的幾種方法

    Redis高效安全的遍歷所有key的幾種方法

    在 Redis 中,遍歷所有的 key 是一個相對昂貴的操作,特別是當(dāng)你有大量的數(shù)據(jù)時,直接使用 KEYS 命令會導(dǎo)致阻塞,這對于大規(guī)模的 Redis 實例來說是非常不安全的,所以本文給大家介紹了幾種Redis高效安全的遍歷所有key的方法,需要的朋友可以參考下
    2025-08-08
  • Redis中Zset類型常用命令的實現(xiàn)

    Redis中Zset類型常用命令的實現(xiàn)

    Zset是Redis的一種有序集合數(shù)據(jù)類型,Zset通過壓縮列表和跳躍表兩種底層編碼方式支持小數(shù)據(jù)集和大數(shù)據(jù)集,支持多種操作,包括添加、查詢、刪除元素以及集合運(yùn)算等,具有不同的時間復(fù)雜度,感興趣的可以了解一下
    2024-10-10
  • Redis解決緩存擊穿問題的兩種方法

    Redis解決緩存擊穿問題的兩種方法

    緩存擊穿問題也叫熱點(diǎn)Key問題,就是?個被高并發(fā)訪問并且緩存重建業(yè)務(wù)較復(fù)雜的key突然失效了,無數(shù)的請求訪問會在瞬間給數(shù)據(jù)庫帶來巨大的沖擊,本文給大家介紹了Redis解決緩存擊穿問題的兩種方法,需要的朋友可以參考下
    2025-03-03

最新評論

昌黎县| 敦煌市| 肇东市| 榕江县| 栖霞市| 衡山县| 仲巴县| 承德市| 涟水县| 磐安县| 四子王旗| 枣庄市| 大安市| 石台县| 祁门县| 玉龙| 花莲县| 安龙县| 榆社县| 德化县| 浪卡子县| 闸北区| 韶山市| 喜德县| 英吉沙县| 甘南县| 安达市| 苏尼特左旗| 砀山县| 兖州市| 建水县| 阳春市| 宜君县| 毕节市| 铅山县| 唐山市| 酉阳| 乌兰浩特市| 安吉县| 米林县| 德化县|