資料庫之redis篇(2)—— redis配置文件,常用命令,性能測試工具

来源:https://www.cnblogs.com/yangva/archive/2018/11/10/9939929.html
-Advertisement-
Play Games

啟動命令帶了這個參數:redis.windows.conf,由於我測試環境是windows平臺,所以是這個,有的是redis.conf。顧名思義,redis.conf就是配置文件,然後啟動時加上這個配置文件名的意思就是以配置文件里的配置參數來啟動,比如你設置了密碼,那麼客戶端連接就得輸入密碼了,等等... ...


redis配置

如果你是找網上的其他教程來完成以上操作的話,相信你見過有的啟動命令是這樣的:

 

啟動命令帶了這個參數:redis.windows.conf,由於我測試環境是windows平臺,所以是這個,有的是redis.conf。顧名思義,redis.conf就是配置文件,然後啟動時加上這個配置文件名的意思就是以配置文件里的配置參數來啟動,比如你設置了密碼,那麼客戶端連接就得輸入密碼了,等等。。。。

打開redis.conf文件看看:

 

裡面一堆的這個,也不知道啥意思。這裡可以從以下來一一對照

 

# 預設情況下,redis不是在後臺模式運行的,如果需要在後臺進程運行,把該項的值更改為yes,預設為no

daemonize:是否以後臺daemon方式運行

# 如redis服務以後臺進程運行的時候,Redis預設會把pid寫入/run/redis.pid文件組,你可以配置到其他文件路徑。

# 當運行多個redis服務時,需要指定不同的pid文件和埠

pidfile:pid文件位置

# 指定redis監聽埠,預設為6379

# 如果埠設置為0,Redis就不會監聽TCP套接字。

port:監聽的埠號

# 指定redis只接收來自於該IP地址的請求,如果不進行設置,預設將處理所有請求,

# 在生產環境中最好設置該項

bind 127.0.0.1

# 設置客戶端連接時的超時時間,單位為秒。當客戶端在這段時間內沒有發出任何指令,那麼關閉該連接

# 預設值:0代表禁用,永不關閉

timeout:請求超時時間

# 指定用來監聽連接的unxi套接字的路徑。這個沒有預設值,所以如果不指定的話,Redis就不會通過unix套接字來監聽。

# unixsocket /tmp/redis.sock

# unixsocketperm 755

# 指定日誌記錄級別

# Redis總共支持四個級別:debug、verbose、notice、warning,預設為verbose

# debug 記錄很多信息,用於開發和測試

# varbose 很多精簡的有用信息,不像debug會記錄那麼多

# notice 普通的verbose,常用於生產環境

# warning 只有非常重要或者嚴重的信息會記錄到日誌

loglevel:log信息級別

# 配置log文件名稱和全路徑地址

# 預設值為stdout,使用“標準輸出”,預設後臺模式會輸出到/dev/null

logfile:log文件位置

# 可用資料庫數,預設值為16,預設資料庫存儲在DB 0號ID庫中,無特殊需求,建議僅設置一個資料庫 databases 1

# 查詢資料庫使用 SELECT <dbid>

# dbid介於 0 到 'databases'-1 之間

databases:開啟資料庫的數量

save * *:保存快照的頻率,第一個*表示多長時間,第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動保存快照。可設置多個條件。

rdbcompression:是否使用壓縮

dbfilename:數據快照文件名(只是文件名,不包括目錄)

dir:數據快照的保存目錄(這個是目錄)

appendonly:是否開啟appendonlylog,開啟的話每次寫操作會記一條log,這會提高數據抗風險能力,但影響效率。

appendfsync:appendonlylog如何同步到磁碟(三個選項,分別是每次寫都強制調用fsync、每秒啟用一次fsync、不調用fsync等待系統自己同步)

########## REPLICATION 同步 ##########

#

# 主從同步。通過 slaveof 配置來實現Redis實例的備份。

# 註意,這裡是本地從遠端複製數據。也就是說,本地可以有不同的資料庫文件、綁定不同的IP、監聽不同的埠。

# 當本機為從服務時,設置主服務的IP及埠,在Redis啟動時,它會自動從主服務進行數據同步

# slaveof <masterip> <masterport>

# 如果主服務master設置了密碼(通過下麵的 "requirepass" 選項來配置),slave服務連接master的密碼,那麼slave在開始同步之前必須進行身份驗證,否則它的同步請求會被拒絕。

#當本機為從服務時,設置主服務的連接密碼

# masterauth <master-password>

# 當一個slave失去和master的連接,或者同步正在進行中,slave的行為有兩種可能:

# 1) 如果 slave-serve-stale-data 設置為 "yes" (預設值),slave會繼續響應客戶端請求,可能是正常數據,也可能是還沒獲得值的空數據。

# 2) 如果 slave-serve-stale-data 設置為 "no",slave會回覆"正在從master同步(SYNC with master in progress)"來處理各種請求,除了 INFO 和 SLAVEOF 命令。

slave-serve-stale-data yes

# slave根據指定的時間間隔向伺服器發送ping請求。

# 時間間隔可以通過 repl_ping_slave_period 來設置。

# 預設10秒

# repl-ping-slave-period 10

# 下麵的選項設置了大塊數據I/O、向master請求數據和ping響應的過期時間。

# 預設值60秒。

# 一個很重要的事情是:確保這個值比 repl-ping-slave-period 大,否則master和slave之間的傳輸過期時間比預想的要短。

# repl-timeout 60

########## SECURITY 安全 ##########

# 要求客戶端在處理任何命令時都要驗證身份和設置密碼。

# 如果你不相信請求者,這個功能很有用。

# 為了向後相容的話,這段應該註釋掉。而且大多數人不需要身份驗證(例如:它們運行在自己的伺服器上。)

# 警告:外部使用者可以每秒嘗試150k的密碼來試圖破解密碼,這意味著你需要一個高強度的密碼,否則破解太容易了。

# 設置連接密碼

# requirepass foobared

# 命令重命名,可設置多個

# 在共用環境下,可以為危險命令改變名字。比如,你可以為 CONFIG 改個其他不太容易猜到的名字,這樣你自己仍然可以使用,而別人卻沒法知道它。

# 例如:

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

# rename-command info info_biran

# rename-command set set_biran

# 甚至也可以通過給命令賦值一個空字元串來完全禁用這條命令:

# rename-command CONFIG ""

########## LIMITS 限制 ##########

# 設置最大同時連接客戶端數量。

# 預設沒有限制,這個關係到Redis進程能夠打開的文件描述符數量。

# 特殊值"0"表示沒有限制。

# 一旦達到這個限制,Redis會關閉所有新連接併發送錯誤"達到最大用戶數上限(max number of clients reached)"

# maxclients 128

# 不要用比設置的上限更多的記憶體。一旦記憶體使用達到上限,Redis會根據選定的回收策略(參見:maxmemmory-policy:記憶體策略設置)刪除key。

# 如果因為刪除策略問題Redis無法刪除key,或者策略設置為 "noeviction",Redis會回覆需要更多記憶體的錯誤信息給命令。

# 例如,SET,LPUSH等等。但是會繼續合理響應只讀命令,比如:GET。

# 在使用Redis作為LRU緩存,或者為實例設置了硬性記憶體限制的時候(使用 "noeviction" 策略)的時候,這個選項還是滿有用的。

# 警告:當一堆slave連上達到記憶體上限的實例的時候,響應slave需要的輸出緩存所需記憶體不計算在使用記憶體當中。

# 這樣當請求一個刪除掉的key的時候就不會觸髮網絡問題/重新同步的事件,然後slave就會收到一堆刪除指令,直到資料庫空了為止。

# 簡而言之,如果你有slave連上一個master的話,那建議你把master記憶體限制設小點兒,確保有足夠的系統記憶體用作輸出緩存。

# (如果策略設置為"noeviction"的話就不無所謂了)

# 設置最大記憶體,達到最大記憶體設置後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理後,任到達最大記憶體設置,將無法再進行寫入操作。

# maxmemory 256000000分配256M記憶體

# maxmemory <bytes>

# 記憶體策略:如果達到記憶體限制了,Redis如何刪除key。你可以在下麵五個策略裡面選:

#

# volatile-lru -> 根據LRU演算法生成的過期時間來刪除。

# allkeys-lru -> 根據LRU演算法刪除任何key。

# volatile-random -> 根據過期設置來隨機刪除key。

# allkeys->random -> 無差別隨機刪。

# volatile-ttl -> 根據最近過期時間來刪除(輔以TTL)

# noeviction -> 誰也不刪,直接在寫操作時返回錯誤。

#

# 註意:對所有策略來說,如果Redis找不到合適的可以刪除的key都會在寫操作時返回一個錯誤。

#

# 這裡涉及的命令:set setnx setex append

# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd

# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby

# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby

# getset mset msetnx exec sort

#

# 預設值如下:

# maxmemory-policy volatile-lru

# LRU和最小TTL演算法的實現都不是很精確,但是很接近(為了省記憶體),所以你可以用樣例做測試。

# 例如:預設Redis會檢查三個key然後取最舊的那個,你可以通過下麵的配置項來設置樣本的個數。

# maxmemory-samples 3

########## APPEND ONLY MODE 純累加模式 ##########

# 預設情況下,Redis是非同步的把數據導出到磁碟上。因為redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於記憶體中,這種情況下,當Redis宕機的時候,最新的數據就丟了。

# 如果不希望丟掉任何一條數據的話就該用純累加模式:一旦開啟這個模式,Redis會把每次寫入的數據在接收後都寫入 appendonly.aof 文件。

# 每次啟動時Redis都會把這個文件的數據讀入記憶體里。

#

# 註意,非同步導出的資料庫文件和純累加文件可以並存(此時需要把上面所有"save"設置都註釋掉,關掉導出機制)。

# 如果純累加模式開啟了,那麼Redis會在啟動時載入日誌文件而忽略導出的 dump.rdb 文件。

#

# 重要:查看 BGREWRITEAOF 來瞭解當累加日誌文件太大了之後,怎麼在後臺重新處理這個日誌文件。

# 設置:yes為純累加模式

appendonly no

# 設置純累加文件名字及保存路徑,預設:"appendonly.aof"

# appendfilename appendonly.aof

# fsync() 請求操作系統馬上把數據寫到磁碟上,不要再等了。

# 有些操作系統會真的把數據馬上刷到磁碟上;有些則要磨蹭一下,但是會儘快去做。

# Redis支持三種不同的模式:

#

# no:不要立刻刷,只有在操作系統需要刷的時候再刷。比較快。

# always:每次寫操作都立刻寫入到aof文件。慢,但是最安全。

# everysec:每秒寫一次。折衷方案。

# 預設的 "everysec" 通常來說能在速度和數據安全性之間取得比較好的平衡。

# 如果你真的理解了這個意味著什麼,那麼設置"no"可以獲得更好的性能表現(如果丟數據的話,則只能拿到一個不是很新的快照);

# 或者相反的,你選擇 "always" 來犧牲速度確保數據安全、完整。

#

# 如果不確定這些模式的使用,建議使用 "everysec"

#

# appendfsync always

appendfsync everysec

# appendfsync no

# 如果AOF的同步策略設置成 "always" 或者 "everysec",那麼後臺的存儲進程(後臺存儲或寫入AOF日誌)會產生很多磁碟I/O開銷。

# 某些Linux的配置下會使Redis因為 fsync() 而阻塞很久。

# 註意,目前對這個情況還沒有完美修正,甚至不同線程的 fsync() 會阻塞我們的 write(2) 請求。

#

# 為了緩解這個問題,可以用下麵這個選項。它可以在 BGSAVE 或 BGREWRITEAOF 處理時阻止 fsync()。

#

# 這就意味著如果有子進程在進行保存操作,那麼Redis就處於"不可同步"的狀態。

# 這實際上是說,在最差的情況下可能會丟掉30秒鐘的日誌數據。(預設Linux設定)

#

# 如果你有延遲的問題那就把這個設為 "yes",否則就保持 "no",這是保存持久數據的最安全的方式。

no-appendfsync-on-rewrite no

# 自動重寫AOF文件

# 如果AOF日誌文件大到指定百分比,Redis能夠通過 BGREWRITEAOF 自動重寫AOF日誌文件。

#

# 工作原理:Redis記住上次重寫時AOF日誌的大小(或者重啟後沒有寫操作的話,那就直接用此時的AOF文件),

# 基準尺寸和當前尺寸做比較。如果當前尺寸超過指定比例,就會觸發重寫操作。

#

# 你還需要指定被重寫日誌的最小尺寸,這樣避免了達到約定百分比但尺寸仍然很小的情況還要重寫。

#

# 指定百分比為0會禁用AOF自動重寫特性。

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

########## SLOW LOG 慢查詢日誌 ##########

# Redis慢查詢日誌可以記錄超過指定時間的查詢。運行時間不包括各種I/O時間。

# 例如:連接客戶端,發送響應數據等。只計算命令運行的實際時間(這是唯一一種命令運行線程阻塞而無法同時為其他請求服務的場景)

#

# 你可以為慢查詢日誌配置兩個參數:一個是超標時間,單位為微妙,記錄超過個時間的命令。

# 另一個是慢查詢日誌長度。當一個新的命令被寫進日誌的時候,最老的那個記錄會被刪掉。

#

# 下麵的時間單位是微秒,所以1000000就是1秒。註意,負數時間會禁用慢查詢日誌,而0則會強制記錄所有命令。

slowlog-log-slower-than 10000

# 這個長度沒有限制。只要有足夠的記憶體就行。你可以通過 SLOWLOG RESET 來釋放記憶體。

slowlog-max-len 128

########## VIRTUAL MEMORY 虛擬記憶體 ##########

### 警告!虛擬記憶體在Redis 2.4是反對的,因性能問題,2.4版本 VM機制徹底廢棄,不建議使用此配置!!!!!!!!!!!

# 虛擬記憶體可以使Redis在記憶體不夠的情況下仍然可以將所有數據序列保存在記憶體里。

# 為了做到這一點,高頻key會調到記憶體里,而低頻key會轉到交換文件里,就像操作系統使用記憶體頁一樣。

# 要使用虛擬記憶體,只要把 "vm-enabled" 設置為 "yes",並根據需要設置下麵三個虛擬記憶體參數就可以了。

vm-enabled no

# 這是交換文件的路徑。估計你猜到了,交換文件不能在多個Redis實例之間共用,所以確保每個Redis實例使用一個獨立交換文件。

# 最好的保存交換文件(被隨機訪問)的介質是固態硬碟(SSD)。

# *** 警告 *** 如果你使用共用主機,那麼預設的交換文件放到 /tmp 下是不安全的。

# 創建一個Redis用戶可寫的目錄,並配置Redis在這裡創建交換文件。

vm-swap-file /tmp/redis.swap

# "vm-max-memory" 配置虛擬記憶體可用的最大記憶體容量。

# 如果交換文件還有空間的話,所有超標部分都會放到交換文件里。

# "vm-max-memory" 設置為0表示系統會用掉所有可用記憶體,建議設置為剩餘記憶體的60%-80%。

# 將所有大於vm-max-memory的數據存入虛擬記憶體,無論vm-max-memory設置多小,所有索引數據都是記憶體存儲的(Redis的索引數據就是keys),也就是說,當vm-max-memory設置為0的時候,其實是所有value都存在於磁碟。預設值為0。

vm-max-memory 0

# Redis交換文件是分成多個數據頁的。

# 一個可存儲對象可以被保存在多個連續頁里,但是一個數據頁無法被多個對象共用。

# 所以,如果你的數據頁太大,那麼小對象就會浪費掉很多空間。

# 如果數據頁太小,那用於存儲的交換空間就會更少(假定你設置相同的數據頁數量)

# 如果你使用很多小對象,建議分頁尺寸為64或32個位元組。

# 如果你使用很多大對象,那就用大一些的尺寸。

# 如果不確定,那就用預設值 :)

vm-page-size 32

# 交換文件里數據頁總數。

# 根據記憶體中分頁表(已用/未用的數據頁分佈情況),磁碟上每8個數據頁會消耗記憶體里1個位元組。

# 交換區容量 = vm-page-size * vm-pages

# 根據預設的32位元組的數據頁尺寸和134217728的數據頁數來算,Redis的數據頁文件會占4GB,而記憶體里的分頁表會消耗16MB記憶體。

# 為你的應驗程式設置最小且夠用的數字比較好,下麵這個預設值在大多數情況下都是偏大的。

vm-pages 134217728

# 同時可運行的虛擬記憶體I/O線程數,即訪問swap文件的線程數。

# 這些線程可以完成從交換文件進行數據讀寫的操作,也可以處理數據在記憶體與磁碟間的交互和編碼/解碼處理。

# 多一些線程可以一定程度上提高處理效率,雖然I/O操作本身依賴於物理設備的限制,不會因為更多的線程而提高單次讀寫操作的效率。

# 特殊值0會關閉線程級I/O,並會開啟阻塞虛擬記憶體機制。

# 設置最好不要超過機器的核數,如果設置為0,那麼所有對swap文件的操作都是串列的.可能會造成比較長時間的延遲,但是對數據完整性有很好的保證.

vm-max-threads 4

########## ADVANCED CONFIG 高級配置 ##########

# 當有大量數據時,適合用哈希編碼(這會需要更多的記憶體),元素數量上限不能超過給定限制。

# Redis Hash是value內部為一個HashMap,如果該Map的成員數比較少,則會採用類似一維線性的緊湊格式來存儲該Map, 即省去了大量指針的記憶體開銷,如下2個條件任意一個條件超過設置值都會轉換成真正的HashMap,

# 當value這個Map內部不超過多少個成員時會採用線性緊湊格式存儲,預設是64,即value內部有64個以下的成員就是使用線性緊湊存儲,超過該值自動轉成真正的HashMap。

hash-max-zipmap-entries 512

# 當 value這個Map內部的每個成員值長度不超過多少位元組就會採用線性緊湊存儲來節省空間。

hash-max-zipmap-value 64

# 與hash-max-zipmap-entries哈希相類似,數據元素較少的情況下,可以用另一種方式來編碼從而節省大量空間。

# list數據類型多少節點以下會採用去指針的緊湊存儲格式

list-max-ziplist-entries 512

# list數據類型節點值大小小於多少位元組會採用緊湊存儲格式

list-max-ziplist-value 64

# 還有這樣一種特殊編碼的情況:數據全是64位無符號整型數字構成的字元串。

# 下麵這個配置項就是用來限制這種情況下使用這種編碼的最大上限的。

set-max-intset-entries 512

# 與第一、第二種情況相似,有序序列也可以用一種特別的編碼方式來處理,可節省大量空間。

# 這種編碼只適合長度和元素都符合下麵限制的有序序列:

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

# 哈希刷新,每100個CPU毫秒會拿出1個毫秒來刷新Redis的主哈希表(頂級鍵值映射表)。

# redis所用的哈希表實現(見dict.c)採用延遲哈希刷新機制:你對一個哈希表操作越多,哈希刷新操作就越頻繁;

# 反之,如果伺服器非常不活躍那麼也就是用點記憶體保存哈希表而已。

# 預設是每秒鐘進行10次哈希表刷新,用來刷新字典,然後儘快釋放記憶體。

# 建議:

# 如果你對延遲比較在意的話就用 "activerehashing no",每個請求延遲2毫秒不太好嘛。

# 如果你不太在意延遲而希望儘快釋放記憶體的話就設置 "activerehashing yes"。

activerehashing yes

########## INCLUDES 包含 ##########

# 包含一個或多個其他配置文件。

# 這在你有標準配置模板但是每個redis伺服器又需要個性設置的時候很有用。

# 包含文件特性允許你引人其他配置文件,所以好好利用吧。

# include /path/to/local.conf

# include /path/to/other.conf

  

常用命令:

客戶端連接命令:

redis-cli -h host -p port -a password

  

測試伺服器啟動連接情況

 

127.0.0.1:6379> ping

PONG

  

查看信息:info

 

其他參數:

-h

設置檢測主機IP地址,預設為127.0.0.1

-p

設置檢測主機的埠號,預設為6379

-s<socket>

伺服器套接字(壓倒主機和埠)

-a

連接到Master伺服器時使用的密碼

-r

執行指定的N次命令

-i

執行命令後等待N秒,如–i 0.1 info(執行後等0.1秒)

-n

指定連接N號ID資料庫,如 –n 3(連接3號資料庫)

-x

從控制台輸入的信息中讀取最後一個參數

-d

定義多個定界符為預設輸出格式(預設: \n)

--raw

使用原數據格式返回輸出內容

--latency

進入一個不斷延時採樣的特殊模式

--slave

模擬一個從伺服器到主伺服器的命令顯示反饋

--pipe

使用管道協議模式

--bigkeys

監聽顯示數據量大的key值,--bigkeys -i 0.1

--help

顯示命令行幫助信息

--version

顯示版本號

  

檢查本地日誌信息,加--fix參數為修複log文件

redis-check-aof.exe log.aof

  

檢查資料庫文件,會輸出該文件大小、使用情況

redis-check-dump.exe dump.rdb 

  

 

redis性能測試工具——redis-benchmark

預設雙擊打開是按照預設的測試參數進行測試

 

後面得到的信息表示的意思:

 

====== PING_INLINE ======
  100000 requests completed in 1.87 seconds  (10萬請求完成用了1.87秒)
  50 parallel clients(50個客戶端併發)
  3 bytes payload(每次寫入三個位元組)
  keep alive: 1(保存一個鏈接數)

84.49% <= 1 milliseconds(82.49%的操作小於1秒完成)
99.71% <= 2 milliseconds (99.71%的操作小於2秒完成)
100.00% <= 2 milliseconds(100.00%的操作小於2秒完成)
53390.28 requests per second(每秒完成53390.28次查詢)

   

根據以上,或者你可以這麼理解,就好像是在做壓力測試

 

redis-benchmark的配置參數,當運行時帶上這些參數就會按帶上的參數進行測試:

 

redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

-h <hostname> 主機名 (預設 127.0.0.1)

-p <port> 主機埠 (預設 6379)

-s <socket> 主機套接字 (覆蓋主機和埠)

-c <clients> 併發連接的數量 (預設 50)

-n <requests> 請求總數 (預設 10000)

-d <size> SET/GET數據的位元組大小(預設 2)

-k <boolean> 1=keep alive 0=reconnect (預設 1)

-r <keyspacelen> SET/GET/INCR使用隨機產生的key, SADD使用隨機值使用這個選項 get/set keys時會用mykey_rand:000000012456代替常量key, <keyspacelen>參數決定了隨機數產生的最大值,比如,設置參數為10,那麼產生的隨機數範圍是rand:000000000000 -rand:000000000009

-P <numreq> Pipeline請求的數量. 預設 1 (不使用pipeline).

-q 展示query/sec值

--csv 以CSV格式輸出

-l 本地迴圈. 一直運行測試

-t <tests> 在運行逗號分割列表的測試. 測試的名字與產生輸出的名字一樣。

-I 空閑模式. 打開 N 個空閑連接,然後等待.

  

比如:

對指定伺服器、埠進行5個同時併發操作,總共操作1000次:redis-benchmark -h 192.168.0.8 -p 6379 -n 1000 -c 5:

 

 

影響redis性能的因素:

網路帶寬和延遲。在執行基準測試前使用ping快速檢測客戶端和伺服器端的延遲是一個良好的做法。對於帶寬,比較好的做法是估計Gbits/s 的吞吐量和網路的理論帶寬值比較。在很多實際的情況,Redis的吞吐量在網路之前會受限於CPU。

CPU也會是一個重要因素。由於單線程的,Redis受益於快速的含有巨大緩存的CPU。

* 記憶體的速度和容量對於小的對象影響不大。但對於大於10KB的對象,可能對需要註意。通常購買昂貴的快速記憶體模塊並不是真正的很有效。

* Redis在虛擬機上運行慢。虛擬化對很多普通操作來說代價太高了,Redis並沒有增加多少開銷在所需的系統調用和網路中斷上。

客戶端和伺服器在一臺機器運行,對於基準測試TCP/IP回送和UNIX域套接字都可以使用。取決於平臺,但UNIX域套接字比TCP/IP回送增加50%的吞吐量。

* 當大量使用 pipelining時,UNIX域套接字獲得的性能好處會減少。

* 當乙太網訪問Redis時,在數據大小小於乙太網數據包的大小(大約1500位元組)時,聚集命令使用 pipelining會非常有效。

在多CPU套接字伺服器,Redis的表現變得依賴於NUMA配置和處理位置。

在高端配置,客戶端連接的數量也是一個重要的因素。基於epool/kqueue模型,Redis的事件迴圈是相當可伸縮的。

在高端的配置,通過調優NIC(s)配置和相關中斷可能取得高吞吐量。

根據平臺,Redis編譯可以使用不同的記憶體分配器,這可能有不同的行為在原始速度,內部和外部的碎片方面

 

 

 參考資料:redis學習指南

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SQL Server 資料庫中表一旦創建,我們不建議擅自調整列的順序,特別是對應的應用系統已經上線,因為部分開發人員,不一定在代碼中指明瞭列名。表是否可以調整列的順序,其實可以自主設置,我們建議在安裝後設置為禁止。 那麼,如果確實需要調整某一列的順序,我們是怎麼操作的呢? 下麵,我們就要演示一下怎麼 ...
  • 好的表結構分的比較細緻,個人理解大概主要分為主表、明細、歷史記錄表、中間表,輔助表結構應該分為:類型表、狀態表、統計表、統計明細表等。為了一個功能加那麼多表實在是多餘,如果寫一個非常複雜的業務邏輯還是很有必要的,因為要做到物帳聯動。這可能不是一個明智的選擇,還有一種方案是儘可能的壓縮表結構,少分一些 ...
  • 作者:依樂祝 原文地址:https://www.cnblogs.com/yilezhu/p/9941208.html 作者:大石頭 時間:2018 11 10 晚上20:00 地點:釘釘群(組織代碼BKMV7685)QQ群:1600800 內容:Redis基本使用及百億數據量中的使用技巧分享 記錄人 ...
  • Greenplum支持原有主機擴展Segment個數、新增主機、和混合擴展 本文以在已有機器上擴展節點為例 1、可按照hostname:address:port:fselocation:dbid:content:preferred_role:replication_port來配置擴展文件 2、執行命 ...
  • 9. 查詢備份還原資料庫的進度。 select command ,percent_complete ,est_time_to_go=convert(varchar,(estimated_completion_time/3600000))+' hour, ' +convert(varchar,(est ...
  • 一:分析函數overOracle從8.1.6開始提供分析函數,分析函數用於計算基於組的某種聚合值,它和聚合函數的不同之處是對於每個組返回多行,而聚合函數對於每個組只返回一行。 1、分析函數和聚合函數的不同之處: 分析函數和聚合函數很多是同名的,意思也一樣,只是聚合函數用group by分組,每個分組 ...
  • 原文地址:https://www.cnblogs.com/moyijian/p/9940323.html#4111551 級聯刪除,比如你刪除某個表的時候後面加這個關鍵字,會在刪除這個表的同時刪除和該表有關係的其他對象 1.級聯刪除表中的信息,當表A中的欄位引用了表B中的欄位時,一旦刪除B中該欄位的 ...
  • in 和exists 對於以上兩種查詢條件,in是把外表和內表作hash 連接,而exists 是對外表作loop 迴圈,每次loop 迴圈再對內表進行查詢。 一直以來認為exists 比in 效率高的說法是不准確的。在不同的情況下,exists與in的性能各有優缺項,如果查詢的兩個表大小相當,那麼 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...