1、官方性能介紹:set達到11萬次/S,get達到8.1萬次/S。當數據庫中的數據達到G級時,寫入速度下降明顯 。
2、官網:http://redis.io/ 中國區網站(非常好,完美翻譯了官方的文檔):http://www.redis.cn/topics/cluster-spec.html
3、特別知識(非常重要):
1)、redis是但單線程模式,使用大緩存快速CPU,而不是多核,推薦intel CPU,AMD的CPU性能只有intel CPU 的一半。
2)、VM虛擬機上運行redis比在物理機器上慢一倍。
安裝包下載地址:下載
3、安裝:
#tar -zxvf redis-2.8.19.tar.gz
#cd redis-2.8.19
#make
#make install
注意事項:1)運行redis前,在/etc/sysctl.conf中添加vm.overcommit_memory=1,否則會出現警告。
2)如果內存緊張,需要設定內容參數 echo 1 >/proc/sys/vm/overcommit_memory
意思如下:0代表內核將檢查是否有足夠內存給應用進程使用,如果有則內存申請通過,否則內存申請失敗,並將錯誤信息報告給應用。
1表示內核允許分配所有的物理內存,而不管當前內存狀態如何。
2表示內核允許分配超過所有物理內存和交換空間總和的內存。
3)echo never > /sys/kernel/mm/transparent_hugepage/enabled
4、redis的相關命令在src目錄下.
啓動redis cd/src 執行 ./redis-server
5、redis主從複製,如下是需要在生產環境上修改的,其他參數可以不看: vi redis.conf
說明:redis主從模式:1、鏈式主從(一主多從):Master-slaver-slaver-salver,但如果第一個slave出現宕機重啓,首先從master 接收 數據恢復腳本,
這個是阻塞的,如果主庫數據幾TB的情況恢復過程得花上一段時間,在這個過程中其他的slave就無法和主庫同步了
2、網狀主從(多主多從):Master-salver-slaver(Master-slaver-slaver)-slaver,比如A是B的Master,但B又是C的Master。。。
1)、redis Master配置,不能直接拷貝過去覆蓋,最好逐個查看修改
#redis運行在後臺,需要修改爲yes,默認爲no
daemonize yes
#請自行修改
port 6379
#redis只接受來自該ip的請求,如果不設置,則接受所有請求,可以有多個空格分割如:192.168.62.155 192.168.62.153
bind 192.168.62.155
#客戶端連接超時時間,單位秒,若客戶端在這段時間沒有發出任何指定,連接關閉,默認爲0
timeout 300
logfile "./log/redis.log"
#最大內存設置,如果redis使用超過此內存,redis首先會刪除設置了expire的key,且不管是否真實過期,如果刪除完了還是內存不夠,則僅支持讀。
maxmemory 5gb
#最大內存清理策略,如果超過內存,則採用lru算法刪除key
maxmemory-policy volatile-lru
maxmemory-samples 3
#appendfsync no
#Mater主密碼,從需要配置密碼才能連接
requirepass hezhixiong
#默認有16個庫,通過客戶端命令select 0可以選擇第一個數據庫,編號爲0-15
databases 16
2)、redis Slave配置,將Master的配置拷貝過去覆蓋並修改
#從redis綁定的IP地址
bind 192.168.62.155
#Master的IP和端口
slaveof 192.168.62.155 6379
#Master的密碼
masterauth hezhixiong
3)、在根目錄下建立log目錄 ,在log下建立redis.log文件。
可通過taif -f redis.log查看日誌
6、啓動和客戶端命令
一、主從redis啓動:
分別啓動Master、salver服務器。
#src/redis-server /soft/redis-2.8.19/redis.conf
如下日誌顯示:redis主從服務器建立成功。
[25438] 16 Mar 21:50:33.751 * Slave 192.168.62.154:6379 asks for synchronization
[25438] 16 Mar 21:50:33.751 * Full resync requested by slave 192.168.62.154:6379
[25438] 16 Mar 21:50:33.751 * Starting BGSAVE for SYNC with target: disk
[25438] 16 Mar 21:50:33.751 * Background saving started by pid 25474
[25474] 16 Mar 21:50:33.754 * DB saved on disk
[25474] 16 Mar 21:50:33.754 * RDB: 0 MB of memory used by copy-on-write
[25438] 16 Mar 21:50:33.772 * Background saving terminated with success
[25438] 16 Mar 21:50:33.773 * Synchronization with slave 192.168.62.154:6379 succeeded
二、客戶端命令連接:
#-a 後面是密碼
redis-cli -h 192.168.62.154 -p 6379 -a hezhixiong
三、客戶端命令設值和取值
set user.1.name zhangsan
get user.1.name
#獲取鍵的數量
dbsize
flushdb:刪除當前數據庫中的所有key
flushdb:刪除所有數據庫中的所有key
select 0:選擇第1個數據庫
EXPIRE mykey 10 :給鍵mykey設置過期時間爲10秒
TTL mykey:將返回10秒,意思是mykey的過期時間是10秒。如果爲0或者負數,代表沒有設置過期時間。
6、性能測試:
redis服務端部署完畢後,可以通過模擬器判斷服務器的性能指標。
1、如上命令在src目下自行,表示模擬500個客戶端,進行1萬次查詢,得出的結論是29585.80 requests per second。即每秒3萬次查詢。
#cd src
#redis-benchmark -h 192.168.62.155 -p 6379 -c 500 -n 10000
2、沒有-c,默認50個客戶端,進行10萬次插入
#redis-benchmark -h 192.168.62.155 -p 6379 -n 100000 -q script load "redis.call('set','foo','bar')"
3、【推薦使用本語句進行性能測試】沒有-c,默認50個客戶端,隨機產生100萬個key-value連續進行200萬次get/set/等請求的性能
redis-benchmark -h 192.168.62.155 -p 6379 -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q
//刪除當前數據庫中的所有Key
flushdb
//刪除所有數據庫中的key
flushall
//下面的命令指定數據序號爲0,即默認數據庫
redis-cli -n 0 keys "*" | xargs redis-cli -n 0 del
如果要指定 Redis 數據庫訪問密碼,使用下面的命令
redis-cli -a password -n 0 keys "*" | xargs redis-cli -a password -n 0 del
7、遺留需要繼續研究的:
1)、redis的集羣
2)、網狀主從
3)、發佈訂閱,可以替換遠程用