redis6種策略(redis關鍵字)

發(fā)布時間:2024-02-28
本文主要介紹redis的六大策略(redis關鍵詞),下面一起看看redis的六大策略(redis關鍵詞)相關資訊。
配置文件中最大內(nèi)存刪除策略在redis的配置文件中,可以設置redis的最大內(nèi)存值。當redis使用的內(nèi)存達到最大值時(你怎么知道已經(jīng)達到最大值),redis選擇刪除這些鍵值。根據(jù)策略,在配置中容納鍵值,并且沒有鍵。這是一致的策略,內(nèi)存已經(jīng)不能適應新的核心值了,但是這個時候,有沒有刪除鍵呢?1.1最大內(nèi)存參數(shù)設置如果maxmemory參數(shù)設置為0,分兩種情況。*在64位系統(tǒng)上,沒有限制。*在32系統(tǒng)中,是3g的官方文檔,redis,32位系統(tǒng)最大內(nèi)存為4g,1g為系統(tǒng)預留,此策略會自動設置為noeviction。也就是說,在32位系統(tǒng)中,如果maxmemory設置為0,則默認值為3g。到了3g,寫入reidis,就會報錯。1.2達到最大內(nèi)存時刪除鍵的幾種策略*易變lru和刪除鍵,停止使用lru算法選擇lru算法(至少最近)和刪除鍵都設置了過期時間。* allkeys lru任意鍵刪除lru算法根據(jù)lru算法刪除任意鍵。這是密鑰設置過期的時間嗎?no. * volatile隨機密鑰和-delete隨機密鑰其過期時間在過期集合中設置的隨機密鑰被隨機刪除。* allkeys隨機刪除一個隨機密鑰,任意密鑰隨機刪除任意密鑰,不管該密鑰是否有過期時間。* volatile ttl key和delete,最晚到期時間(secondary ttl)用最后一個值(ttl)刪除密鑰。*如果沒有證據(jù)不會過期,它將返回一個錯誤的寫操作,如果沒有設置終止時間,它將返回一個錯誤。1.3配置最大內(nèi)存策略。以下命令的默認策略是:volatile lru在此命令中寫入# date:setnx,此附加月份,rpush lpush rpushx # increase lpushx lin sert lset rpoplush,sade sinter sinterstore和sunionstore,此sdiffstore # zadd zincrby zuniostore zinterstore hset hse tnx hm set hinc rby # incr by decrby # jie xian mset mset mset tnx執(zhí)行排序# default: # maxmemory lru 1.4用可變策略配置刪除鍵的檢測樣本數(shù)maxmemory樣本由于lru和最小ttl算法都是不精確的算法,所以可以選擇要檢查的樣本數(shù)。例如,在默認情況下,redis將檢查3個鍵選擇的鍵,這些鍵從3開始最近沒有使用過。當然,你可以查看樣本號的值修改。要修改這個值,可以在配置文件中設置參數(shù):maxmemory sample 3 2這些刪除策略的實現(xiàn)是在函數(shù)freememoryifneed(void)中。以下是對每種策略的實施的詳細描述。2.1什么時候刪除鍵值當maxmemory策略被設置,鍵值被刪除的時候,其實就是當maxmemory參數(shù)被設置,對應的鍵值被刪除的時候,各個命令的處理。代碼如下:每個命令處理客戶端都會調(diào)用這個函數(shù)的maxmemory指令國際進程命令(redisclient × c) {…。/正在處理* *首先,如果可能,我們嘗試釋放一些內(nèi)存(如果有)*數(shù)據(jù)集中的鍵)。如果我們不這樣做。;t擁有唯一的東西*返回一個錯誤。如果有可以刪除的鍵,釋放一些內(nèi)存,如果沒有,返回一個錯誤給客戶端。如果(服務器。maxmemory){//如果maxmemory不為0,那么調(diào)用下面的函數(shù)釋放某個鍵int = freememoryiffed(use);//根據(jù)分配策略刪除key,if((c-command-flag redis _ cmd _ deny oom retry =)redis _ err){//如果有錯誤,則終止處理命令,并向客戶端標志事務返回錯誤(c);addreply(c,分享。oomerr);返回redis _ ok;} }……}練習1:如果沒有設置maxmemory變量,那么即使設置了maxmemory策略也不起作用。實戰(zhàn)二:如果不設置maxmemory變量,在不會調(diào)用釋放策略的時候,會加速命令的處理和命令的進程。2.2刪除鍵的全過程當內(nèi)存達到最大時,我們需要根據(jù)策略刪除舊的鍵。所有的刪除和刪除策略都是通過freememoryiffed函數(shù)實現(xiàn)的。在執(zhí)行刪除策略之前,首先選擇數(shù)據(jù)庫和鍵。一般步驟如下:國際freememoryiffed(void){ size _ t mem _ used,mem_tofree,mem _ freed;int slave = listlength(服務器。奴隸);mstime_t延遲;移除從輸出/緩沖和非緩沖大小*內(nèi)存使用計數(shù)。mem _ used = zmalloc _ used _ memory;if(slaves){ listiterli;idea:* ln;;listrewind(server.slaves,李);和((ln = list next(li))){ redis client * slave = list nodevalue(ln);無符號長度obuf _ bytes = getclientoutputbuffermoryuusage(slave);if(obuf _ bytes mem _ used)mem _ used = 0;other mem _ used = obuf _ bytes}} if (server.aof_state!= redis _ aof _ off){ mem _ used = sds len(server。aof _ buf);mem _ used = aofrewritebuffersize;}檢查我們是否超過了內(nèi)存*限制。檢查當前系統(tǒng)是否超過限制內(nèi)存if (mem_used server。maxmemory)返回redis _ ok;如果(server . maxmemory _ policy = redis _ maxmemory _ no _ evil)返回redis_err,我們需要自由;/* */沒有內(nèi)存,只有策略。計算我們需要多少內(nèi)存。mem _ to free = mem _ used-server . maxmemory;mem _ freed = 0;latencystartmonitor(延遲);and (mem_freed mem_tofree){ int j,k,keys _ freed = 0;;16數(shù)據(jù)庫遍歷是(j = 0;;j mem _ used)mem _ used = 0;other mem _ used = obuf _ bytes}} if (server.aof_state!= redis _ aof _ off){//減去已用內(nèi)存大小mem_used = sdslen (server。aof _ buf);mem _ used = aofrewritebuffersize;}檢查我們是否超過了內(nèi)存限制。*檢查內(nèi)存限制的設置。if (mem_used服務器。maxmemory)返回redis _ ok;如果(server.maxmemory_policy = redis _ maxmemory _ no _ evil)return redis _ err我們需要自由;/* */沒有內(nèi)存,只有策略。內(nèi)存量計算出我們需要多少內(nèi)存。*待釋放計算mem _ to free = mem _ used-server . maxmemory;mem _ freed = 0;latencystartmonitor(延遲);且(mem _ freed mem _ to free){//已經(jīng)釋放,釋放的內(nèi)存小于總內(nèi)存int j,k,keys _ freed = 0;;for(j = 0;j將無效。如果最大存儲/刪除策略是易變lru,您需要從數(shù)據(jù)庫中找到它。如果//volatile xx策略,當前操作的數(shù)據(jù)庫存儲結構無效,需要從字典中查找key if(server . maxmemory _ policy = redis _ maxmemory _ volatile _ lru)germany = dict find(d b-dictionary,this key);獲取密鑰恢復值o = dictgetval(德國);關鍵視圖中剩余的時間this val = estimateobjective time(o);更高的空閑時間是更好的選擇* * delete//該鍵從lru的幾個鍵遍歷中一次選擇最長的。如何更新//l值?關鍵是每次看,關鍵lru值更新,這是系統(tǒng)的時間戳。if(this = = null | | this val best val){ this = this;bestval = thisval} } } volatile ttl/* * * if(server . maxmemory _ policy = = redis _ maxmemory _ volatile _ ttl){ is(k = 0;;k < server.maxmemory _ samplesk ){此表;長thisval;德國= dictgetrandomkey(字典);this key = dictgetkey(德國);thisval = (long) dictgetval(德國);過期太早(過期時間戳越小越好)*已刪除候選* if(this = = null | | this val id);decrefcount(key obj);keys _ freed當內(nèi)存開始空閑/足夠大的時候,我們就可以*不可能開始花這么多時間在這里*足夠快可以把數(shù)據(jù)傳到從機,所以我們強制。*環(huán)路中的傳輸。if(slave)flushlaslavesoutputbuffers;}}如果(!keys _ freed){ latency end monitor(delay);latencyaddsampleifneeded(驅逐循環(huán)無自由返回redis _ err/* * /…}} latencyendmonitor(延遲);latencyaddsampleifneeded(驅逐循環(huán)返回redis _ ok;邊肖分享了您關于redis上述關鍵戰(zhàn)略的實施方法的全部內(nèi)容。希望能給大家一個參考,希望大家支持。
了解更多redis的六大策略(redis關鍵詞)相關內(nèi)容請關注本站點。
上一個:RC0201FR-071M27L,0201 1.27MΩ 1% 1/20W 電阻
下一個:10款消暑瘦身茶喝出s形好身材

龜背竹的養(yǎng)護
深圳長腿叔叔音樂劇時間-地址
冬季中蟹爪蘭的養(yǎng)護管理
綁架罪的法律責任是什么
國巨電阻免費樣品去哪里申請?
調(diào)心球軸承
小米藍牙耳機青春版開箱簡單上手介紹使用方法(小米藍牙耳機青春版好不好)
手機殺毒軟件哪個好,蘋果手機殺毒軟件哪個好(手機殺毒軟件哪個好,蘋果手機殺毒軟件哪個好一點)
電機馬達是智能工廠常用的機器裝備
五色梅灰霉病防治
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos