溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis4.0支持的新功能說明

發(fā)布時間:2020-05-24 09:17:43 來源:網(wǎng)絡 閱讀:488 作者:HW云中間件 欄目:云計算

本文以華為云DCS for Redis版本為例,介紹Redis4.0的新功能。文章轉載自華為云幫助中心。

與Redis3.x版本相比,DCS的Redis4.x以上版本,除了開源Redis增加的特性之外,還有如下大特性增強。

l 創(chuàng)建耗時縮短

實例由虛機方式改成了物理機容器化部署,創(chuàng)建實例只需要8~10秒時間完成。

l 性能提升

高性能版Redis4.x,操作系統(tǒng)使用華為自研的輕量級LibOS,單節(jié)點QPS從10w提升到30w

l 節(jié)省成本

高性能版Redis4.x,實例規(guī)格以1G為步長,用多少G買多少G,靈活定制,不再受限2的n次方要求。

相比于之前的版本,華為云Redis4.x在性能方面有了不小的提升,大大提高了使用者的體驗,如果你想了解更加詳細的具體實操內(nèi)容,點這個鏈接

https://www.huaweicloud.com/product/dcs.html

給你更多驚喜。

接下來給大家介紹,開源Redis4.0版本新功能的具體特性。

Redis4.x版本更新的特性,主要涉及三個方面:

新命令的增加,如MEMORY、SWAPDB。
Lazyfree機制,延遲刪除大key,降低刪除操作對系統(tǒng)資源的占用影響。
內(nèi)存性能優(yōu)化,即主動碎片整理。
MEMORY命令

在Redis3.x及之前,只能通過info memory命令了解有限的幾個內(nèi)存統(tǒng)計信息。Redis4.0引入新的命令memory,讓您能夠更深入了解Redis的內(nèi)存使用情況。

127.0.0.1:6379[8]> memory help
1) MEMORY <subcommand> arg arg ... arg. Subcommands are:
2) DOCTOR - Return memory problems reports.
3) MALLOC-STATS -- Return internal statistics report from the memory allocator.
4) PURGE -- Attempt to purge dirty pages for reclamation by the allocator.
5) STATS -- Return information about the memory usage of the server.
6) USAGE <key> [SAMPLES <count>] -- Return memory in bytes used by <key> and its value. Nested values are sampled up to <count

times (default: 5).
127.0.0.1:6379[8]>
  

usage

輸入memory usage [key],如果當前key存在,則返回key的value實際使用內(nèi)存估算值;如果key不存在,則返回nil。

127.0.0.1:6379[8]> set dcs "DCS is an online, distributed, in-memory cache service compatible with Redis, Memcached, and i
n-memory data grid (IMDG)."
OK
127.0.0.1:6379[8]> memory usage dcs
(integer) 171
127.0.0.1:6379[8]>
usage統(tǒng)計value內(nèi)存占用,以及key自身的內(nèi)存占用,不包含key的Expire內(nèi)存占用。

127.0.0.1:6379[8]> set dcs.huaweiclou "Distributed Cache Service"
OK
127.0.0.1:6379[8]> memory usage dcs.huaweiclou
(integer) 85
127.0.0.1:6379[8]> set dcs.huaweicloud "Distributed Cache Service"
OK
127.0.0.1:6379[8]> memory usage dcs.huaweicloud
(integer) 86 //key名稱長度變化后,內(nèi)存占用也有變化
127.0.0.1:6379[8]> expire dcs.huaweicloud 100000
(integer) 1
127.0.0.1:6379[8]> memory usage dcs.huaweicloud
(integer) 86 //加了過期時間后,內(nèi)存占用沒有改變
127.0.0.1:6379[8]>
  

對hash、list、set、sorted set等數(shù)據(jù)類型,usage命令會抽樣統(tǒng)計,提供內(nèi)存占用的估算值。

使用方式:memory usage keyset samples 1000

其中keyset表示一個集合數(shù)據(jù)類型的key,1000表示抽樣個數(shù)。

stats

返回當前實例內(nèi)存使用細節(jié)。

使用方法:memory stats

127.0.0.1:6379[8]> memory stats
1) "peak.allocated"
2) (integer) 2412408
3) "total.allocated"
4) (integer) 2084720
5) "startup.allocated"
6) (integer) 824928
7) "replication.backlog"
... ...

以下給出部分數(shù)據(jù)返回項的具體含義

表1-1 memory stats

數(shù)據(jù)返回項

說明

peak.allocated

Redis實例運行過程中,allocator分配的內(nèi)存峰值。同info memory的used_memory_peak

total.allocated

allocator當前分配的內(nèi)存字節(jié)數(shù)。同info memory的used_memory

startup.allocated

Redis啟動占用的內(nèi)存字節(jié)數(shù)

replication.backlog

Redis復制積壓緩沖區(qū)(replication backlog)內(nèi)存使用字節(jié)數(shù),通過repl-backlog-size參數(shù)設置,默認1M

clients.slaves

在master側,所有slave clients消耗的內(nèi)存字節(jié)數(shù)

clients.normal

Redis所有常規(guī)客戶端消耗內(nèi)存節(jié)字數(shù)

overhead.total

Redis額外的總開銷內(nèi)存字節(jié)數(shù); 即分配器分配的總內(nèi)存total.allocated,減去數(shù)據(jù)實際存儲使用內(nèi)存。

keys.count

Redis實例中key的數(shù)量

keys.bytes-per-key

每個key平均占用字節(jié)數(shù)。注意,overhead也會均攤到每個key上,因此不能以此值來表示業(yè)務實際的key平均長度。

dataset.bytes

表示Redis數(shù)據(jù)占用的內(nèi)存容量。即分配的內(nèi)存總量,減去總的額外開銷內(nèi)存量。

dataset.percentage

表示Redis數(shù)據(jù)占用內(nèi)存占總內(nèi)存分配的百分比

peak.percentage

當前內(nèi)存使用量與峰值時的占比

fragmentation

表示Redis的內(nèi)存碎片率

doctor

使用方法: memory doctor

used_memory(total.allocated)小于5M,doctor認為內(nèi)存使用量過小,不做進一步診斷。當滿足以下某一點,Redis會給出診斷結果和建議:

peak分配內(nèi)存大于當前total_allocated的1.5倍,即peak.allocated/total.allocated > 1.5,說明內(nèi)存碎片率高,RSS遠大于used_memory
High fragmentation/fragmentation大于1.4,說明內(nèi)存碎片率高
每個Normal Client平均使用內(nèi)存大于200KB,說明pipeline可能使用不當,或Pub/Sub客戶端處理消息不及時
每個Slave Client平均使用內(nèi)存大于10MB,說明master的寫入流量過高
purge

使用方法: memory purge

用途:通過調(diào)用jemalloc內(nèi)部命令,進行內(nèi)存釋放。釋放對象包括Redis進程占用但未有效使用的內(nèi)存,即常說的內(nèi)存碎片。

memory purge只適用于使用jemalloc作為allocator的Redis實例。

Lazy free機制

解決的痛點/問題

Redis是單線程程序,當運行一個耗時較大的請求時,會導致所有請求排隊等待,在請求處理完成前,Redis不能響應其他請求,因此容易引發(fā)性能問題。而Redis刪除大的集合鍵時,就屬于一種比較耗時的請求。

原理

Redis4.x提供的一種惰性刪除或者說延遲釋放機制,主要用于解決刪除大key對Redis進程的阻塞,從而避免帶來性能與可用性問題。

刪除key時,Redis異步延時釋放key的內(nèi)存,把key釋放操作放在bio(Background I/O)單獨的子線程處理中。

使用方法

主動刪除
? unlink

unlink與del命令目的一樣,刪除某個key。unlink在刪除集合類鍵時,如果集合鍵的元素個數(shù)大于64個,會把內(nèi)存釋放操作,給單獨的bio(Background I/O)線程來執(zhí)行。因此unlink刪除操作能在非常短的時間內(nèi)完成包含上百萬個元素的大key刪除。

? flushall/flushdb

通過對flushall/flushdb添加ASYNC異步清理選項,Redis在清理整個實例或單個DB時,操作都是異步的。

過期key刪除、大key驅逐刪除
被動刪除有四種場景,每種場景對應一個配置參數(shù),默認都是關閉:

lazyfree-lazy-eviction no //針對redis內(nèi)存使用達到maxmeory,并設置有淘汰策略時,是否采用lazy free機制
lazyfree-lazy-expire no //針對設置有TTL的鍵,達到過期后,被redis清理刪除時是否采用lazy free機制
lazyfree-lazy-server-del no //針對有些指令在處理已存在的鍵時,會帶有一個隱式的DEL鍵的操作
slave-lazy-flush no //針對slave進行全量數(shù)據(jù)同步,slave在加載master的RDB文件前,會運行flushall來清理自己的數(shù)據(jù)場景

以上配置如需使用,請?zhí)峁巫稍兗夹g服務人員。

其他新增命令

swapdb

用途:交換同一Redis實例內(nèi)2個db的數(shù)據(jù)。

用法:swapdb dbindex1 dbindex2

zlexcount

用途:在有序集合中,返回符合條件的元素個數(shù)。

用法:zlexcount key min max

內(nèi)存使用和性能改進

使用更少的內(nèi)存來存儲相同數(shù)量的數(shù)據(jù)
可以對使用的內(nèi)存進行碎片整理,并逐漸回收

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI