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

Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題?

 更新時間:2023年03月15日 10:30:16   作者:每天都要進步一點點  
大key并不是指key的值很大,而是key對應的value很大,下面這篇文章主要給大家介紹了Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題的相關資料,需要的朋友可以參考下

一、什么是Big Key?

通俗易懂的講,Big Key就是某個key對應的value很大,占用的redis空間很大,本質上是大value問題。key往往是程序可以自行設置的,value往往不受程序控制,因此可能導致value很大。

redis中這些Big Key對應的value值很大,在序列化/反序列化過程中花費的時間很大,因此當我們操作Big Key時,通常比較耗時,這就可能導致redis發(fā)生阻塞,從而降低redis性能。

用幾個實際的例子對大Key的特征進行描述:

● 一個String類型的Key,它的值為5MB(數(shù)據(jù)過大);

● 一個List類型的Key,它的列表數(shù)量為20000個(列表數(shù)量過多);

● 一個ZSet類型的Key,它的成員數(shù)量為10000個(成員數(shù)量過多);

● 一個Hash格式的Key,它的成員數(shù)量雖然只有1000個但這些成員的value總大小為100MB(成員體積過大);

在實際業(yè)務中,大Key的判定仍然需要根據(jù)Redis的實際使用場景、業(yè)務場景來進行綜合判斷。通常都會以數(shù)據(jù)大小與成員數(shù)量來判定。

二、Big Key產(chǎn)生的場景?

1、redis數(shù)據(jù)結構使用不恰當

將Redis用在并不適合其能力的場景,造成Key的value過大,如使用String類型的Key存放大體積二進制文件型數(shù)據(jù)。

2、未及時清理垃圾數(shù)據(jù)

沒有對無效數(shù)據(jù)進行定期清理,造成如HASH類型Key中的成員持續(xù)不斷的增加。即一直往value塞數(shù)據(jù),卻沒有刪除機制,value只會越來越大。

3、對業(yè)務預估不準確

業(yè)務上線前規(guī)劃設計考慮不足沒有對Key中的成員進行合理的拆分,造成個別Key中的成員數(shù)量過多。

4、明星、網(wǎng)紅的粉絲列表、某條熱點新聞的評論列表

假設我們使用List數(shù)據(jù)結構保存某個明星/網(wǎng)紅的粉絲,或者保存熱點新聞的評論列表,因為粉絲數(shù)量巨大,熱點新聞因為點擊率、評論數(shù)會很多,這樣List集合中存放的元素就會很多,可能導致value過大,進而產(chǎn)生Big Key問題。

三、Big Key的危害?

1、阻塞請求

Big Key對應的value較大,我們對其進行讀寫的時候,需要耗費較長的時間,這樣就可能阻塞后續(xù)的請求處理。Redis的核心線程是單線程,單線程中請求任務的處理是串行的,前面的任務完不成,后面的任務就處理不了。

2、內(nèi)存增大

讀取Big Key耗費的內(nèi)存比正常Key會有所增大,如果不斷變大,可能會引發(fā)OOM(內(nèi)存溢出),或達到redis的最大內(nèi)存maxmemory設置值引發(fā)寫阻塞或重要Key被逐出。

3、阻塞網(wǎng)絡

讀取單value較大時會占用服務器網(wǎng)卡較多帶寬,自身變慢的同時可能會影響該服務器上的其他Redis實例或者應用。

4、影響主從同步、主從切換

刪除一個大Key造成主庫較長時間的阻塞并引發(fā)同步中斷或主從切換。

四、如何識別Big Key?

1、使用redis自帶的命令識別

例如可以使用Redis官方客戶端redis-cli加上--bigkeys參數(shù),可以找到某個實例5種數(shù)據(jù)類型(String、hash、list、set、zset)的最大key。
    優(yōu)點是可以在線掃描,不阻塞服務;缺點是信息較少,內(nèi)容不夠精確。

2、使用debug object key命令

根據(jù)傳入的對象(Key的名稱)來對Key進行分析并返回大量數(shù)據(jù),其中serializedlength的值為該Key的序列化長度,需要注意的是,Key的序列化長度并不等同于它在內(nèi)存空間中的真實長度,此外,debug object屬于調(diào)試命令,運行代價較大,并且在其運行時,進入Redis的其余請求將會被阻塞直到其執(zhí)行完畢。并且每次只能查找單個key的信息,官方不推薦使用。

3、redis-rdb-tools開源工具

這種方式是在redis實例上執(zhí)行bgsave,bgsave會觸發(fā)redis的快照備份,生成rdb持久化文件,然后對dump出來的rdb文件進行分析,找到其中的大key。

GitHub地址:https://github.com/sripathikrishnan/redis-rdb-tools

優(yōu)點在于獲取的key信息詳細、可選參數(shù)多、支持定制化需求,結果信息可選擇json或csv格式,后續(xù)處理方便,其缺點是需要離線操作,獲取結果時間較長。

五、如何解決Big Key問題?

要解決Big Key問題,無非就是減小key對應的value值的大小,也就是對于String數(shù)據(jù)結構的話,減少存儲的字符串的長度;對于List、Hash、Set、ZSet數(shù)據(jù)結構則是減少集合中元素的個數(shù)。

1、對大Key進行拆分

將一個Big Key拆分為多個key-value這樣的小Key,并確保每個key的成員數(shù)量或者大小在合理范圍內(nèi),然后再進行存儲,通過get不同的key或者使用mget批量獲取。

2、對大Key進行清理

對Redis中的大Key進行清理,從Redis中刪除此類數(shù)據(jù)。Redis自4.0起提供了UNLINK命令,該命令能夠以非阻塞的方式緩慢逐步的清理傳入的Key,通過UNLINK,你可以安全的刪除大Key甚至特大Key。

3、監(jiān)控Redis的內(nèi)存、網(wǎng)絡帶寬、超時等指標

通過監(jiān)控系統(tǒng)并設置合理的Redis內(nèi)存報警閾值來提醒我們此時可能有大Key正在產(chǎn)生,如:Redis內(nèi)存使用率超過70%,Redis內(nèi)存1小時內(nèi)增長率超過20%等。

4、定期清理失效數(shù)據(jù)

如果某個Key有業(yè)務不斷以增量方式寫入大量的數(shù)據(jù),并且忽略了其時效性,這樣會導致大量的失效數(shù)據(jù)堆積??梢酝ㄟ^定時任務的方式,對失效數(shù)據(jù)進行清理。

5、壓縮value

使用序列化、壓縮算法將key的大小控制在合理范圍內(nèi),但是需要注意序列化、反序列化都會帶來一定的消耗。如果壓縮后,value還是很大,那么可以進一步對key進行拆分。

補充知識:key設計

(1)【建議】: 可讀性和可管理性

以業(yè)務名(或數(shù)據(jù)庫名)為前綴(防止key沖突),用冒號分隔,比如業(yè)務名:表名:id
o2o:order:1

(2)【建議】:簡潔性

保證語義的前提下,控制key的長度,當key較多時,內(nèi)存占用也不容忽視,例如:
user:{uid}:friends:messages:{mid} 簡化為 u:{uid}????m:{mid}

(3)【強制】:不要包含特殊字符

反例:包含空格、換行、單雙引號以及其他轉義字符

總結

到此這篇關于Redis中什么是Big Key(大key)問題的文章就介紹到這了,更多相關Redis Big Key問題解決內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Redis Set 集合的實例詳解

    Redis Set 集合的實例詳解

    這篇文章主要介紹了 Redis Set 集合的實例詳解的相關資料,Redis的Set是string類型的無序集合。集合成員是唯一的,并且不重復,需要的朋友可以參考下
    2017-08-08
  • 幾分鐘教你掌握Redis簡單動態(tài)字符串SDS

    幾分鐘教你掌握Redis簡單動態(tài)字符串SDS

    這篇文章主要為大家介紹了幾分鐘教你掌握Redis簡單動態(tài)字符串SDS方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 一篇吃透Redis緩存穿透、雪崩、擊穿問題

    一篇吃透Redis緩存穿透、雪崩、擊穿問題

    這篇文主要介紹了Redis緩存穿透,緩存雪崩,緩存擊穿的問題解決方法,文中有詳細的圖文介紹,對大家了解Redis有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Redis高階之容錯切換的實現(xiàn)

    Redis高階之容錯切換的實現(xiàn)

    本文主要介紹了Redis高階之容錯切換的實現(xiàn),當一臺主節(jié)點宕機后,從節(jié)點會自動接管成為新的主節(jié)點,當原主節(jié)點恢復后,它不會自動成為主節(jié)點,需要通過手動操作將其重新設置為從節(jié)點,感興趣的可以了解一下
    2025-02-02
  • Redis實現(xiàn)訂單過期刪除的方法步驟

    Redis實現(xiàn)訂單過期刪除的方法步驟

    本文主要介紹了Redis實現(xiàn)訂單過期刪除的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 詳解redis集群的三種方式

    詳解redis集群的三種方式

    Redis三種集群方式分別是主從復制,哨兵模式,Cluster集群,這篇文章主要介紹了redis集群的三種方式,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • redis中List列表常見命令及使用場景

    redis中List列表常見命令及使用場景

    這篇文章主要給大家介紹了關于redis中List列表常見命令及使用場景的相關資料,Redis列表是簡單的字符串列表,按照插入順序排序,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Redis批量刪除key的命令詳解

    Redis批量刪除key的命令詳解

    這篇文章主要介紹了Redis批量刪除key的命令詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • redis yml配置的用法小結

    redis yml配置的用法小結

    RedisYML配置是Redis的一種配置文件格式,,對Redis的配置進行統(tǒng)一管理,本文就來介紹了redis yml配置的用法小結,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • redis的hGetAll函數(shù)的性能問題(記Redis那坑人的HGETALL)

    redis的hGetAll函數(shù)的性能問題(記Redis那坑人的HGETALL)

    這篇文章主要介紹了redis的hGetAll函數(shù)的性能問題,需要的朋友可以參考下
    2016-02-02

最新評論

鄄城县| 巴彦县| 左云县| 库伦旗| 黄浦区| 吉隆县| 卢龙县| 大英县| 新巴尔虎左旗| 盈江县| 鸡泽县| 呼和浩特市| 库尔勒市| 安丘市| 麻栗坡县| 浦城县| 双峰县| 丰顺县| 邳州市| 麻栗坡县| 兰溪市| 靖边县| 庆城县| 潢川县| 磐石市| 句容市| 鄂托克旗| 阳高县| 乾安县| 共和县| 泌阳县| 江口县| 太白县| 凤庆县| 竹北市| 邵阳县| 富川| 栾川县| 镇坪县| 柏乡县| 惠东县|