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

Redis正確使用的十個(gè)技巧

 更新時(shí)間:2015年10月14日 14:37:58   投稿:lijiao  
Redis已經(jīng)走過(guò)了很長(zhǎng)的一段路,隨之而來(lái)的一系列最佳實(shí)踐,使得大多數(shù)人可以正確地使用Redis,下面我們將探索正確使用 Redis 的10個(gè)技巧。

Redis 在當(dāng)前的技術(shù)社區(qū)里是非常熱門(mén)的。從來(lái)自 Antirez 一個(gè)小小的個(gè)人項(xiàng)目到成為內(nèi)存數(shù)據(jù)存儲(chǔ)行業(yè)的標(biāo)準(zhǔn),Redis已經(jīng)走過(guò)了很長(zhǎng)的一段路。
1、停止使用 KEYS *

Okay,以挑戰(zhàn)這個(gè)命令開(kāi)始這篇文章,或許并不是一個(gè)好的方式,但其確實(shí)可能是最重要的一點(diǎn)。很多時(shí)候當(dāng)我們關(guān)注一個(gè)redis實(shí)例的統(tǒng)計(jì)數(shù)據(jù), 我們會(huì)快速地輸入”KEYS *”命令,這樣key的信息會(huì)很明顯地展示出來(lái)。平心而論,從程序化的角度出發(fā)往往傾向于寫(xiě)出下面這樣的偽代碼:

for key in 'keys *': 
 doAllTheThings() 

但是當(dāng)你有1300萬(wàn)個(gè)key時(shí),執(zhí)行速度將會(huì)變慢。因?yàn)镵EYS命令的時(shí)間復(fù)雜度是O(n),其中n是要返回的keys的個(gè)數(shù),這樣這個(gè)命令的復(fù)雜度就取決于數(shù)據(jù)庫(kù)的大小了。并且在這個(gè)操作執(zhí)行期間,其它任何命令在你的實(shí)例中都無(wú)法執(zhí)行。

作為一個(gè)替代命令,看一下 SCAN 吧,其允許你以一種更友好的方式來(lái)執(zhí)行… SCAN 通過(guò)增量迭代的方式來(lái)掃描數(shù)據(jù)庫(kù)。這一操作基于游標(biāo)的迭代器來(lái)完成的,因此只要你覺(jué)得合適,你可以隨時(shí)停止或繼續(xù)。

2、找出拖慢 Redis 的罪魁禍?zhǔn)?/strong>

由于 Redis 沒(méi)有非常詳細(xì)的日志,要想知道在 Redis 實(shí)例內(nèi)部都做了些什么是非常困難的。幸運(yùn)的是 Redis 提供了一個(gè)下面這樣的命令統(tǒng)計(jì)工具:

127.0.0.1:6379> INFO commandstats 
# Commandstats 
cmdstat_get:calls=78,usec=608,usec_per_call=7.79 
cmdstat_setex:calls=5,usec=71,usec_per_call=14.20 
cmdstat_keys:calls=2,usec=42,usec_per_call=21.00 
cmdstat_info:calls=10,usec=1931,usec_per_call=193.10 

通過(guò)這個(gè)工具可以查看所有命令統(tǒng)計(jì)的快照,比如命令執(zhí)行了多少次,執(zhí)行命令所耗費(fèi)的毫秒數(shù)(每個(gè)命令的總時(shí)間和平均時(shí)間)

只需要簡(jiǎn)單地執(zhí)行 CONFIG RESETSTAT 命令就可以重置,這樣你就可以得到一個(gè)全新的統(tǒng)計(jì)結(jié)果。

3、將 Redis-Benchmark 結(jié)果作為參考,而不要一概而論

Redis 之父 Salvatore 就說(shuō)過(guò):“通過(guò)執(zhí)行GET/SET命令來(lái)測(cè)試Redis就像在雨天檢測(cè)法拉利的雨刷清潔鏡子的效果”。很多時(shí)候人們跑到我這里,他們想知道為什么自己的 Redis-Benchmark統(tǒng)計(jì)的結(jié)果低于最優(yōu)結(jié)果 。但我們必須要把各種不同的真實(shí)情況考慮進(jìn)來(lái),例如:

  • 可能受到哪些客戶端運(yùn)行環(huán)境的限制?
  • 是同一個(gè)版本號(hào)嗎?
  • 測(cè)試環(huán)境中的表現(xiàn)與應(yīng)用將要運(yùn)行的環(huán)境是否一致?

Redis-Benchmark的測(cè)試結(jié)果提供了一個(gè)保證你的 Redis-Server 不會(huì)運(yùn)行在非正常狀態(tài)下的基準(zhǔn)點(diǎn),但是你永遠(yuǎn)不要把它作為一個(gè)真實(shí)的“壓力測(cè)試”。壓力測(cè)試需要反應(yīng)出應(yīng)用的運(yùn)行方式,并且需要一個(gè)盡可能的和生產(chǎn)相似的環(huán)境。

4、Hashes 是你的最佳選擇

以一種優(yōu)雅的方式引入 hashes 吧。hashes 將會(huì)帶給你一種前所未有的體驗(yàn)。之前我曾看到過(guò)許多類似于下面這樣的key結(jié)構(gòu):

foo:first_name 
foo:last_name 
foo:address 

上面的例子中,foo 可能是一個(gè)用戶的用戶名,其中的每一項(xiàng)都是一個(gè)單獨(dú)的 key。這就增加了 犯錯(cuò)的空間,和一些不必要的 key。使用 hash 代替吧,你會(huì)驚奇地發(fā)現(xiàn)竟然只需要一個(gè) key :

127.0.0.1:6379> HSET foo first_name "Joe" 
(integer) 1 
127.0.0.1:6379> HSET foo last_name "Engel" 
(integer) 1 
127.0.0.1:6379> HSET foo address "1 Fanatical Pl" 
(integer) 1 
127.0.0.1:6379> HGETALL foo 
1) "first_name" 
2) "Joe" 
3) "last_name" 
4) "Engel" 
5) "address" 
6) "1 Fanatical Pl" 
127.0.0.1:6379> HGET foo first_name 
"Joe" 

5、設(shè)置 key 值的存活時(shí)間

無(wú)論什么時(shí)候,只要有可能就利用key超時(shí)的優(yōu)勢(shì)。一個(gè)很好的例子就是儲(chǔ)存一些諸如臨時(shí)認(rèn)證key之類的東西。當(dāng)你去查找一個(gè)授權(quán)key時(shí)——以 OAUTH為例——通常會(huì)得到一個(gè)超時(shí)時(shí)間。這樣在設(shè)置key的時(shí)候,設(shè)成同樣的超時(shí)時(shí)間,Redis就會(huì)自動(dòng)為你清除!而不再需要使用KEYS *來(lái)遍歷所有的key了,怎么樣很方便吧?

6、選擇合適的回收策略

既然談到了清除key這個(gè)話題,那我們就來(lái)聊聊回收策略。當(dāng) Redis 的實(shí)例空間被填滿了之后,將會(huì)嘗試回收一部分key。根據(jù)你的使用方式,我強(qiáng)烈建議使用 Volatile-lru 策略——前提是你對(duì)key已經(jīng)設(shè)置了超時(shí)。但如果你運(yùn)行的是一些類似于 cache 的東西,并且沒(méi)有對(duì) key 設(shè)置超時(shí)機(jī)制,可以考慮使用 allkeys-lru 回收機(jī)制。我的建議是先在這里查看一下可行的方案。

7、如果你的數(shù)據(jù)很重要,請(qǐng)使用 Try/Except

如果必須確保關(guān)鍵性的數(shù)據(jù)可以被放入到 Redis 的實(shí)例中,我強(qiáng)烈建議將其放入 try/except 塊中。幾乎所有的Redis客戶端采用的都是“發(fā)送即忘”策略,因此經(jīng)常需要考慮一個(gè) key 是否真正被放到 Redis 數(shù)據(jù)庫(kù)中了。至于將 try/expect 放到 Redis 命令中的復(fù)雜性并不是本文要講的,你只需要知道這樣做可以確保重要的數(shù)據(jù)放到該放的地方就可以了。

8、不要耗盡一個(gè)實(shí)例

無(wú)論什么時(shí)候,只要有可能就分散多redis實(shí)例的工作量。從3.0.0版本開(kāi)始,Redis就支持集群了。Redis集群允許你基于key范圍分離出部分包含主/從模式的key。完整的集群背后的“魔法”可以在這里找到。但如果你是在找教程,那這里是一個(gè)再適合不過(guò)的地方了。如果不能選擇集群,考慮一下命名空間吧,然后將你的key分散到多個(gè)實(shí)例之中。關(guān)于怎樣分配數(shù)據(jù),在redis.io網(wǎng)站上有這篇精彩的評(píng)論。

9、內(nèi)核越多越好嗎?

當(dāng)然是錯(cuò)的。Redis 是一個(gè)單線程進(jìn)程,即使啟用了持久化最多也只會(huì)消耗兩個(gè)內(nèi)核。除非你計(jì)劃在一臺(tái)主機(jī)上運(yùn)行多個(gè)實(shí)例——希望只會(huì)是在開(kāi)發(fā)測(cè)試的環(huán)境下!——否則的話對(duì)于一個(gè) Redis 實(shí)例是不需要2個(gè)以上內(nèi)核的。

10、高可用

到目前為止 Redis Sentinel 已經(jīng)經(jīng)過(guò)了很全面的測(cè)試,很多用戶已經(jīng)將其應(yīng)用到了生產(chǎn)環(huán)境中(包括 ObjectRocket )。如果你的應(yīng)用重度依賴于 Redis ,那就需要想出一個(gè)高可用方案來(lái)保證其不會(huì)掉線。當(dāng)然,如果不想自己管理這些東西,ObjectRocket 提供了一個(gè)高可用平臺(tái),并提供7×24小時(shí)的技術(shù)支持,有意向的話可以考慮一下。

以上就是關(guān)于Redis正確使用的十個(gè)技巧,希望對(duì)大家的學(xué)習(xí)有所幫助,果斷收藏吧

相關(guān)文章

  • Redis設(shè)置key的過(guò)期時(shí)間

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

    本文主要介紹了Redis設(shè)置key的過(guò)期時(shí)間,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 利用yum安裝Redis的方法詳解

    利用yum安裝Redis的方法詳解

    Redis是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。從2010年3月15日起,Redis的開(kāi)發(fā)工作由VMware主持。這篇文章主要介紹的是利用yum安裝Redis的方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧
    2016-11-11
  • Redis常用數(shù)據(jù)類型命令實(shí)例匯總

    Redis常用數(shù)據(jù)類型命令實(shí)例匯總

    這篇文章主要介紹了Redis常用數(shù)據(jù)類型命令實(shí)例匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • redis分布式鎖與zk分布式鎖的對(duì)比分析

    redis分布式鎖與zk分布式鎖的對(duì)比分析

    這篇文章主要介紹了redis分布式鎖與zk分布式鎖的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 推薦幾款 Redis 可視化工具(太厲害了)

    推薦幾款 Redis 可視化工具(太厲害了)

    這篇文章主要介紹了推薦幾款 Redis 可視化工具,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Redis中的3種特殊數(shù)據(jù)結(jié)構(gòu)詳解

    Redis中的3種特殊數(shù)據(jù)結(jié)構(gòu)詳解

    在本文中,我們對(duì)三種特殊的數(shù)據(jù)類型進(jìn)行了介紹,它們分別是geospatial(地理空間數(shù)據(jù)類型)、HyperLogLogs和Bitmaps(位圖),這些數(shù)據(jù)類型在不同的領(lǐng)域和應(yīng)用中發(fā)揮著重要作用,并且具有各自獨(dú)特的特性和用途,對(duì)Redis特殊數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2024-02-02
  • Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文)

    Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文)

    這篇文章主要介紹了Windows環(huán)境下Redis Cluster環(huán)境搭建(圖文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 提高redis緩存命中率的方法

    提高redis緩存命中率的方法

    在本篇文章里小編給大家整理了關(guān)于怎么提高redis緩存命中率的相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • Redis入門(mén)基礎(chǔ)常用操作命令整理

    Redis入門(mén)基礎(chǔ)常用操作命令整理

    這篇文章主要為大家介紹了Redis入門(mén)基礎(chǔ)常用操作命令的整理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Redis實(shí)現(xiàn)分布式鎖方法詳細(xì)

    Redis實(shí)現(xiàn)分布式鎖方法詳細(xì)

    在單體應(yīng)用中,如果我們對(duì)共享數(shù)據(jù)不進(jìn)行加鎖操作,會(huì)出現(xiàn)數(shù)據(jù)一致性問(wèn)題,我們的解決辦法通常是加鎖。在分布式架構(gòu)中,我們同樣會(huì)遇到數(shù)據(jù)共享操作問(wèn)題。本文將介紹Redis實(shí)現(xiàn)分布式鎖的五種方式。需要的可以參考一下
    2021-12-12

最新評(píng)論