Redis事務(wù)
| 命令 | 描述 |
|---|---|
| multi | 標(biāo)記一個(gè)事務(wù)的開始 |
| exec | 執(zhí)行所有事務(wù)塊內(nèi)的命令 |
| discard | 取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令 |
| watch key [key] | 監(jiān)視一個(gè)(或多個(gè)) key ,如果在事務(wù)執(zhí)行之前這個(gè)(或這些) key 被其他命令所改動(dòng),那么事務(wù)將被打斷。 |
| unwatch | 取消watch命令對(duì)所有 key 的監(jiān)視。 |
Redis持久化
RDB
-
介紹
在指定的時(shí)間間隔內(nèi)生成內(nèi)存中整個(gè)數(shù)據(jù)集的持久化快照??煺瘴募J(rèn)被存儲(chǔ)在當(dāng)前文件夾中,名稱為
dump.rdb,可以通過dir和dbfilename參數(shù)來修改默認(rèn)值,如果不修改則在啟動(dòng)redis的目錄中生成rdb文件。Redis會(huì)單獨(dú)創(chuàng)建(fork)一個(gè)子進(jìn)程來進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫入到一個(gè)臨時(shí)文件中,待持久化過程都結(jié)束了,再用這個(gè)臨時(shí)文件替換上次持久化好的文件。 整個(gè)過程中,主進(jìn)程是不進(jìn)行任何的IO操作的,這就確保了極高的性能。
修改redis.conf
# redis是基于內(nèi)存的數(shù)據(jù)庫(kù),可以通過設(shè)置該值定期寫入磁盤。
# 注釋掉“save”這一行配置項(xiàng)就可以讓保存數(shù)據(jù)庫(kù)功能失效 # 900秒(15分鐘)內(nèi)至少1個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化)
# 300秒(5分鐘)內(nèi)至少10個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化)
# 60秒(1分鐘)內(nèi)至少10000個(gè)key值改變(則進(jìn)行數(shù)據(jù)庫(kù)保存--持久化)
save 900 1
save 300 10
save 60 10000
#當(dāng)RDB持久化出現(xiàn)錯(cuò)誤后,是否依然進(jìn)行繼續(xù)進(jìn)行工作,yes:不能進(jìn)行工作,no:可以繼續(xù)進(jìn)行工作,可以通過info中的rdb_last_bgsave_status了解RDB持久化是否有錯(cuò)誤
stop-writes-on-bgsave-error yes
#使用壓縮rdb文件,rdb文件壓縮使用LZF壓縮算法,yes:壓縮,但是需要一些cpu的消耗。no:不壓縮,需要更多的磁盤空間
rdbcompression yes
#是否校驗(yàn)rdb文件。從rdb格式的第五個(gè)版本開始,在rdb文件的末尾會(huì)帶上CRC64的校驗(yàn)和。這跟有利于文件的容錯(cuò)性,但是在保存rdb文件的時(shí)候,會(huì)有大概10%的性能損耗,所以如果你追求高性能,可以關(guān)閉該配置。
rdbchecksum yes
#rdb文件的名稱
dbfilename dump.rdb
#數(shù)據(jù)目錄,數(shù)據(jù)庫(kù)的寫入會(huì)在這個(gè)目錄。rdb、aof文件也會(huì)寫在這個(gè)目錄
dir /data
AOF
-
介紹
以日志的形式來記錄每個(gè)寫操作,將Redis執(zhí)行過的所有寫指令記錄下來(讀操作補(bǔ)不可記錄),只許追加文件但不可以改寫文件,redis啟動(dòng)之初會(huì)讀取改文件重新構(gòu)建數(shù)據(jù)。保存的是appendonly.aof文件
# aof機(jī)制默認(rèn)關(guān)閉,可以通過參數(shù)appendonly 開啟aof機(jī)制
appendonly yes
# 通過參數(shù)appendfilename指定aof文件名稱
appendfilename myaoffile.aof
如果AOF和RDB,redis優(yōu)先使用AOF。
Redis主從復(fù)制
配置
保留一個(gè)redis.conf公共文件和三個(gè)其他文件。

配置文件如下:修改端口即可。使用include引入redis.conf。

redis.conf中關(guān)閉appendonly。其中當(dāng)其他文件公用redis.conf中的rdb數(shù)據(jù)路徑dir 。
# aof機(jī)制默認(rèn)關(guān)閉,可以通過參數(shù)appendonly 開啟aof機(jī)制
appendonly no
# 通過參數(shù)appendfilename指定aof文件名稱
appendfilename myaoffile.aof
設(shè)置主從
配從(庫(kù))不配主(庫(kù)),可以通過info replication查看狀態(tài)信息。
#配置從庫(kù)
slaveof 主庫(kù)ip 主庫(kù)端口
#查看主從信息
info replication
? 每次與master斷開后,都需要重新連接,除非你配置進(jìn)redis.conf文件

薪火相傳
含義:就是上一個(gè)Slave可以是下一個(gè)slave的Master,Slave同樣可以接收其他slaves的連接和同步請(qǐng)求,那么該slave作為了鏈條中下一個(gè)的master,可以有效減輕master的寫壓力。
反客為主
使用以下命令使當(dāng)前數(shù)據(jù)庫(kù)停止與其他數(shù)據(jù)庫(kù)的同步,轉(zhuǎn)成主數(shù)據(jù)庫(kù)。
SLAVEOF no one
哨兵模式
反客為主的自動(dòng)版,能夠后臺(tái)監(jiān)控Master庫(kù)是否故障,如果故障了根據(jù)投票數(shù)自動(dòng)將slave庫(kù)轉(zhuǎn)換為主庫(kù)。一組sentinel能同時(shí)監(jiān)控多個(gè)Master。
步驟
在Master對(duì)應(yīng)redis.conf同目錄下新建sentinel.conf文件,名字絕對(duì)不能錯(cuò);
配置哨兵,在sentinel.conf文件中填入內(nèi)容(可以配置多個(gè)):
#說明:最后一個(gè)數(shù)字1,表示主機(jī)掛掉后slave投票看讓誰(shuí)接替成為主機(jī),得票數(shù)多少后成為主機(jī)。
sentinel monitor 被監(jiān)控?cái)?shù)據(jù)庫(kù)名字(自己起名字) ip port 1
sentinel monitor mymaster 127.0.0.1 6379 1
在某個(gè)路徑下啟動(dòng)哨兵模式(路徑按照自己的需求進(jìn)行配置):
redis-sentinel /myRedis/sentinel.conf
Redis集群
安裝ruby環(huán)境
可能出現(xiàn)版本過低問題,可參考Linux中安裝ruby、redis requires Ruby version >= 2.2.2 系統(tǒng)默認(rèn) ruby 版本過低,導(dǎo)致 Redis 接口安裝失敗
yum install ruby
yum install rubygems
配置文件
1. 創(chuàng)建文件
- 一個(gè)集群至少要有三個(gè)主節(jié)點(diǎn),即要有六個(gè)節(jié)點(diǎn)。
- 分配原則盡量保證每個(gè)主數(shù)據(jù)庫(kù)運(yùn)行在不同的ip地址,每個(gè)從庫(kù)和主庫(kù)不在一個(gè)ip地址。
- 當(dāng)主節(jié)點(diǎn)崩了,從節(jié)點(diǎn)能自動(dòng)升為主節(jié)點(diǎn);當(dāng)主節(jié)點(diǎn)再次恢復(fù)時(shí),主節(jié)點(diǎn)變?yōu)閟lave。參考哨兵模式。
- 不在同一個(gè)slot下的鍵值,不能使用mset、mget等操作。

2. 每個(gè)文件的配置內(nèi)容
需要修改數(shù)字部分
include /home/huzh/myRedis/redis.conf
port 6379
pidfile /var/run/redis_6379.pid
dbfilename dump6379.rdb
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
redis.conf中的參數(shù)
# 只有所有slot插槽都正常的時(shí)候才對(duì)外提供服務(wù),默認(rèn)為yes
# cluster-require-full-coverage yes
3. 將六個(gè)節(jié)點(diǎn)合成一個(gè)集群
首先進(jìn)入nginx安裝目錄,即解壓目錄/home/huzh/redis-3.2.5/src。使用真實(shí)ip 和端口
cd /home/huzh/redis-3.2.5/src
# --replicas 1 表示為集群的每個(gè)主節(jié)點(diǎn)創(chuàng)建一個(gè)從節(jié)點(diǎn)
./redis-trib.rb create --replicas 1 192.168.118.128:6379 192.168.118.128:6380 192.168.118.128:6381 192.168.118.128:6389 192.168.118.128:6390 192.168.118.128:6391
4. 命令
cluster nodes #查看集群信息
redis-cli -p 端口 #會(huì)報(bào)錯(cuò)
redis-cli -c -p 端口 #可以實(shí)現(xiàn)重定向
可以通過{}來定義組的概念,從而使key中{}內(nèi)相同內(nèi)容的鍵值對(duì)放到一個(gè)slot中去。
set user:{info}:name xxx
set age{info} 12
set {info}email 12345@qq.com
hset user{info} name jiang
hset user{info} age 19
hset user{info} eamil 12345@qq.com