Redis具體解釋

redis 學習指南

1、介紹html

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型、一個高性能的key-value數據庫。並提供多種語言的API。說到Key-Value數據庫NoSQL數據庫可以想到MongoDB。git

和Memcached相似,它支持存儲的value類型相對不少其它,包含string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,而且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣。爲了保證效率,數據都是緩存在內存中。差異的是redis會週期性的把更新的數據寫入磁盤或者把改動操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。github

 

2、 基於windows 64bit安裝

安裝以前請務必肯定你是Administrator管理員帳號的windows用戶!假設不是 Administrator用戶,則可能需要以管理員身份執行. 或者參考 Windows 7 啓用超級管理員administrator帳戶的N種方法redis

在redis的下載頁面有這種一段話,說的意思是指redis項目未有提供對windows系統的支持,而Microsoft Open Tech提供了一個基於win64的redis實現。那就是說僅僅支持64位系統了,32位的windows系統的同窗就老老實實的換系統去吧。(*^__^*)算法

The Redis project does not officially support Windows. However, the Microsoft Open Tech group develops and maintains this Windows port targeting Win64.
 

一、 下載與安裝數據庫

下載地址:https://github.com/MSOpenTech/redis/releases/download/win-2.8.19/redis-2.8.19.zipwindows

下載成功後解壓可以看到例如如下文件api

clip_image002

Windows下的安裝差點兒沒有什麼過程,解壓後就可以使用。緩存

簡介下着幾個exe文件的用途:安全

redis.windows.conf redis的配置文件

redis-benchmark.exe 測試工具。測試redis的讀寫性能狀況

redis-check-aof.exe aof 修復檢查日誌

redis-check-dump.exe dump 檢查數據庫文件

redis-cli.exe redisclient程序

redis-server.exe redis服務器程序

 
3、 使用redis工具

一、 redis-server 雙擊執行或者用dos命令打開都可以,成功執行後可以看到界面內容例如如下:

clip_image004

會帶有版本、執行進程號、執行port信息。並且會提醒使用redis.windows.conf配置文件。假設你啓動失敗的話,提醒內存問題。那就需要改動下配置文件的maxheap配置(默認狀況下該配置沒有賦值的,且沒有開啓),改動例如如下:

# maxheap <bytes>

maxheap 1024000000

另外一種啓動方式就是帶指定redis.conf配置文件的啓動方式。例如如下:

clip_image006

當你想使用不一樣的配置文件來設置不一樣server參數的時候就需要這樣,默認會使用根文件夾下的配置文件。

redis-server /biran/conf/redis.conf 啓動並加裝指定配置文件

redis-server - (read config from stdin) 使用標準輸入讀取配置爲啓動參數

redis-server --test-memory 256 檢測256MB內存

redis-server –version 查版本

假設準備長期使用,則需要註冊爲系統服務.

進入CMD,切換到redis所在文件夾:

註冊服務,可以保存爲 service-install.bat 文件:

redis-server.exe --service-install redis.windows.conf --loglevel verbose

redis-server --service-start

卸載服務, 可以保存爲 uninstall-service.bat 文件:

redis-server --service-stop

redis-server --service-uninstall

可以在註冊服務時,經過 –service-name redisService1 參數直接指定服務名,適合安裝多個實例的狀況,卸載也是相同的道理.

啓動redisserver時也可以直接指定配置文件,可以保存爲 startup.bat 文件:

redis-server.exe redis.windows.conf

 

二、 redis.windows.conf各項配置參數介紹

# 默認狀況下,redis不是在後臺模式執行的,假設需要在後臺進程執行。把該項的值更改成yes。默以爲no

daemonize:是否之後臺daemon方式執行

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

# 當執行多個redis服務時,需要指定不一樣的pid文件和port

pidfile:pid文件位置

# 指定redis監聽port,默以爲6379

# 假設port設置爲0,Redis就不會監聽TCP套接字。

port:監聽的端口號

# 指定redis僅僅接收來自於該IP地址的請求,假設不進行設置,默認將處理所有請求,

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

bind 127.0.0.1

# 設置client鏈接時的超時時間,單位爲秒。當client在這段時間內沒有發出不論什麼指令,那麼關閉該鏈接

# 默認值: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、監聽不一樣的port。

# 當本機爲從服務時。設置主服務的IP及port,在Redis啓動時,它會本身主動從主服務進行數據同步

# slaveof <masterip> <masterport>

# 假設主服務master設置了password(經過如下的 "requirepass" 選項來配置),slave服務鏈接master的password,那麼slave在開始同步以前必須進行身份驗證,不然它的同步請求會被拒絕。

#當本機爲從服務時,設置主服務的鏈接password

# masterauth <master-password>

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

# 1) 假設 slave-serve-stale-data 設置爲 "yes" (默認值),slave會繼續響應client請求,多是正常數據。也多是還沒得到值的空數據。

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

slave-serve-stale-data yes

# slave依據指定的時間間隔向server發送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 安全 ##########

# 要求client在處理不論什麼命令時都要驗證身份和設置password。

# 假設你不相信請求者,這個功能很是實用。

# 爲了向後兼容的話,這段應該凝視掉。而且大多數人不需要身份驗證(好比:它們執行在本身的server上。)

# 警告:外部使用者可以每秒嘗試150k的password來試圖破解password。這意味着你需要一個高強度的password。不然破解太easy了。

# 設置鏈接password

# requirepass foobared

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

# 在共享環境下。可以爲危急命令改變名字。比方。你可以爲 CONFIG 改個其它不太easy猜到的名字,這樣你本身仍然可以使用。而別人卻無法知道它。

# 好比:

# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52

# rename-command info info_biran

# rename-command set set_biran

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

# rename-command CONFIG ""

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

# 設置最大同一時候鏈接client數量。

# 默認沒有限制,這個關係到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時間。

# 好比:鏈接client,發送響應數據等。

僅僅計算命令執行的實際時間(這是惟一一種命令執行線程堵塞而沒法同一時候爲其它請求服務的場景)

#

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

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

#

# 如下的時間單位是微秒,因此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

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

# 這樣的編碼僅僅適合長度和元素都符合如下限制的有序序列:

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

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

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

# 反之,假設server很不活躍那麼也就是用點內存保存哈希表而已。

# 默認是每秒鐘進行10次哈希表刷新。用來刷新字典,而後儘快釋放內存。

# 建議:

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

# 假設你不太在乎延遲而但願儘快釋放內存的話就設置 "activerehashing yes"。

activerehashing yes

########## INCLUDES 包括 ##########

# 包括一個或多個其它配置文件。

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

# 包括文件特性贊成你引人其它配置文件,因此好好利用吧。

# include /path/to/local.conf

# include /path/to/other.conf

改動配置後。假設配置文件涉及到中文內容記得將文件存爲UTF-8編碼。

 

三、 redis-cli client使用

測試server啓動鏈接狀況

127.0.0.1:6379> ping

PONG

查看server級別信息(測試server)

127.0.0.1:6379> info

# Server

redis_version:2.8.19

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:9968db13395be4aa

redis_mode:standalone

os:Windows

arch_bits:64

multiplexing_api:winsock_IOCP

gcc_version:0.0.0

process_id:9204

run_id:fc4a126eaed1572b6855c9af511d3451eb358c85

tcp_port:6379

uptime_in_seconds:2365

uptime_in_days:0

hz:10

lru_clock:3087964

config_file:G:\software\redis\redis.windows.conf

# Clients

connected_clients:1

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

# Memory

used_memory:11568456

used_memory_human:11.03M

used_memory_rss:11534800

used_memory_peak:11568456

used_memory_peak_human:11.03M

used_memory_lua:35840

mem_fragmentation_ratio:1.00

mem_allocator:dlmalloc-2.8

# Persistence

loading:0

rdb_changes_since_last_save:0

rdb_bgsave_in_progress:0

rdb_last_save_time:1429148959

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:-1

rdb_current_bgsave_time_sec:-1

aof_enabled:0

加入數據

127.0.0.1:6379> set user hoojo

OK

127.0.0.1:6379> get user

"hoojo"

查看所有的key信息

127.0.0.1:6379> keys *

1) "key:000000000308"

2) "key:000000000900"

3) "key:__rand_int__"

4) "key:000000000809"

5) "key:000000000164"

6) "key:000000000887"

基本參數介紹

-h

設置檢測主機IP地址。默以爲127.0.0.1

-p

設置檢測主機的port號,默以爲6379

-s<socket>

server套接字(壓倒主機和port)

-a

鏈接到Masterserver時使用的password

-r

運行指定的N次命令

-i

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

-n

指定鏈接N號ID數據庫。如 –n 3(鏈接3號數據庫)

-x

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

-d

定義多個定界符爲默認輸出格式(默認: \n)

--raw

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

--latency

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

--slave

模擬一個從server到主server的命令顯示反饋

--pipe

使用管道協議模式

--bigkeys

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

--help

顯示命令行幫助信息

--version

顯示版本

 

四、 redis-benchmark 性能測試工具

默認雙擊打開是依照默認的測試參數進行測試。

clip_image008

輸入如上命令後會看到例如如下信息。代表同一時候併發10個鏈接,總共100次操做。

通俗易懂的說就是10個用戶同一時候操做,總共每人操做10次的意思。

100 requests completed in 0.01 seconds (100個請求完畢於0.01秒)

10 parallel clients (10個客戶端併發)

3 bytes payload (每次寫入3個字節)

keep alive: 1 (保存一個連接數)

100.00% <= 1 milliseconds (100%的操做小於1秒完畢)

16666.67 requests per second (每秒完畢16666.67次查詢)

命令參數說明

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

-h <hostname> 主機名 (默認 127.0.0.1)

-p <port> 主機端口 (默認 6379)

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

-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 個空暇鏈接。而後等待.

執行演示樣例

對指定server、port進行20個同一時候併發操做。總共操做100000次

redis-benchmark -h 192.168.1.136 -p 6379 -n 100000 -c 20

測試set寫入操做1000000次。隨機數範圍在100000000

redis-benchmark -t set -n 1000000 -r 100000000

測試ping、set、get操做100000次。結果輸出用csv格式

redis-benchmark -t ping,set,get -n 100000 –-csv

redis-benchmark -r 10000 -n 10000 lpush mylist ele:rand:000000000000

 

五、 redis-check-aof 基本使用方法

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

redis-check-aof.exe log.aof

 

六、 redis-check-dump 檢查數據庫文件

redis-check-dump.exe dump.rdb 會輸出該文件大小、使用狀況。

 

4、影響Redis性能的因素

* 網絡帶寬和延遲。在運行基準測試前使用ping高速檢測client和server端的延遲是一個良好的作法。

對於帶寬,比較好的作法是預計Gbits/s 的吞吐量和網絡的理論帶寬值比較。在很是多實際的狀況。Redis的吞吐量在網絡以前會受限於CPU。

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

* 內存的速度和容量對於小的對象影響不大。但對於大於10KB的對象,可能對需要注意。一般購買昂貴的高速內存模塊並不是真正的很是有效。

* Redis在虛擬機上執行慢。虛擬化對很是多普通操做來講代價過高了,Redis並無添加多少開銷在所需的系統調用和網絡中斷上。

* client和server在一臺機器執行,對於基準測試TCP/IP回送和UNIX域套接字都可以使用。取決於平臺。但UNIX域套接字比TCP/IP回送添加50%的吞吐量。

* 當大量使用 pipelining時,UNIX域套接字得到的性能優勢會下降。

* 當以太網訪問Redis時。在數據大小小於以太網數據包的大小(大約1500字節)時,彙集命令使用 pipelining會頗有效。

* 在多CPU套接字server。Redis的表現變得依賴於NUMA配置和處理位置。

* 在高端配置,client鏈接的數量也是一個重要的因素。基於epool/kqueue模型。Redis的事件循環是至關可伸縮的。

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

*依據平臺,Redis編譯可以使用不一樣的內存分配器,這可能有不一樣的行爲在原始速度,內部和外部的碎片方面

相關文章
相關標籤/搜索