redies 學習筆記

1:  redis解壓完成之後直接執行make命令; 可選步驟: make test  測試編譯情況
(可能出現: need tcl  >8.4這種情況, yum install tcl)
可能會出現缺少依賴包:
yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make
--------------------- 
如果報致命錯誤:
make MALLOC=libc

2 安裝到指定的目錄,比如 /usr/local/redis
make  PREFIX=/usr/local/redis install
注: PREFIX要大寫

3: make install之後,得到如下幾個文件
redis-benchmark  性能測試工具
redis-check-aof  日誌文件檢測工(比如斷電造成日誌損壞,可以檢測並修復)
redis-check-dump  快照文件檢測工具,效果類上
redis-cli  客戶端
redis-server 服務端
 
4: 複製配置文件
Cp /path/redis.conf /usr/local/redis

5: 啓動與連接
/path/to/redis/bin/redis-server  ./path/to/conf-file
例:[root@localhost redis]# ./bin/redis-server ./redis.conf 

6: 讓redis以後臺進程的形式運行
編輯conf配置文件,修改如下內容;
daemonize yes

8.:啓動客戶端
   ./bin/redis-cli
  

###redies 常用的命令

get key	 	獲取key的值
set key pl	給key賦值(會覆蓋原有的值)
del key		刪除key
exists key	判斷key是否存在
flushdb 	清空存儲區

* ? [] 通配符
rename key newkey 	將key改名爲newkey(已存在的會被覆蓋)
renamenx key newkey 同上(已存在的改名失敗)

select 1	查看1號空間
move key 1	將key移動到1空間

ttl key			查看key 過期時間(-1:永久   -2:不存在)
expire key 100	設置key的有效時間(秒)
persist key 	設置key時間永久有效

mset key1 value1 key2 value2 ke3 value3 設置多個值
mget key1 key2 key1	設置多個值
--------------------------------
字符串操作
set key pl ex 10	(賦值,並設置有效時間)
set key pl xx		給已經存在的key賦值
set key pl nx		給不存在的key賦值
append key value	追加值
getrang key 1 4  	獲取指定範圍的值
getset key value 	讀取key的值,並設置新的值
incr key			加1
decr key			減一
incrby key 3		加3
incrbyfloat key 1.5 浮點型增加
setbit key 2 1 		將大寫字母變爲小寫
setbit key 2 0 		大寫變爲小寫
場景:
存儲json 信息; 計數器
-----------------------------------------
鏈表操作
rpush key value		鏈表右側賦值
lpush key value 	鏈表左側賦值
lrange key start stop 返回鏈表中的元素(0-1)返回全部
ltrim key start stop  刪除鏈表的值
lpop key 			  彈出值
lrem key count value  刪除count個值爲value的0
llen key			  返回鏈表的長度
linsert key before index value 在指定位置插入value
rpoplpush key1 key2   key1彈出,key2 加入
brpop key time 		  彈出(沒值時等待)
場景: 可以實現消息隊列功能 lpush+brpop
---------------------------------------------------------
集合 操作
sadd key val1 val2 va3		集合添加
semembers	key 			查看集合
srem sex val1				刪除集合下的值
spop key 					隨機彈出個val
srandmember key 			返回集合中一個元素
sismember key value 		判斷value 是否在key 集合中
scard key 					判斷集合中有多少個元素
smove key1 key2 value 		將value從key1移動到key2
sinter key1 key2 key3		交集
sunion key1 key2 key3		並集
sdiff key1 key2				差集
sinterstore saveKey key1 key2 key3 交集並保存
場景: 
sadd 加標籤
spop/srandmember  隨機數
sadd+sinter  社交共同好友
---------------------------------------------------------
redies 事務
multi 		事務開始
---
---
exec		事務結束
discard		撤銷
watch key   監視key,如果key有變,事務取消
unwatch 	取消監視

發佈與訂閱
publish news 'today is sunshine'  	信息發佈
subscribe news 			消息訂閱
psubscrible news 		通配符

動態修改信息
config set XXX true
config get XXX

退出客戶端
quit

redies 持久化配置

redies 持久化配置——快照

save 900 1       900內,有1條寫入,則產生快照 
save 300 1000    如果300秒內有1000次寫入,則產生快照
save 60 10000    如果60秒內有10000次寫入,則產生快照
(這3個選項都屏蔽,則rdb禁用)

stop-writes-on-bgsave-error yes  後臺備份進程出錯時,主進程停不停止寫入?
rdbcompression yes     導出的rdb文件是否壓縮
Rdbchecksum   yes 	   導入rbd恢復時數據時,要不要檢驗rdb的完整性
dbfilename dump.rdb    導出來的rdb文件名
dir ./  			   rdb的放置路徑

rdb 方式保存數據, 沒有達到保存條件時,會發生數據的丟失。

redies 持久化配置——aof

appendonly no # 是否打開 aof日誌功能

appendfsync always   # 每1個命令,都立即同步到aof. 安全,速度慢
appendfsync everysec # 折衷方案,每秒寫1次
appendfsync no      # 寫入工作交給操作系統,由操作系統判斷緩衝區大小,統一寫入到aof. 同步頻率低,速度快,

no-appendfsync-on-rewrite  yes: # 正在導出rdb快照的過程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重寫時的大小,增長率100%時,重寫
auto-aof-rewrite-min-size 64mb #aof文件,至少超過64M時,重寫

注: 在dump rdb過程中,aof如果停止同步,會不會丟失?
答: 不會,所有的操作緩存在內存的隊列裏, dump完成後,統一操作.

注: aof重寫是指什麼?
答: aof重寫是指把內存中的數據,逆化成命令,寫入到.aof日誌裏.
以解決 aof日誌過大的問題.

問: 如果rdb文件,和aof文件都存在,優先用誰來恢復數據?
答: aof

問: 2種是否可以同時用?
答: 可以,而且推薦這麼做

問: 恢復時rdb和aof哪個恢復的快
答: rdb快,因爲其是數據的內存映射,直接載入到內存,而aof是命令,需要逐條執行

主從複製

我們將一臺Redis服務器作主庫(Matser),其他三臺作爲從庫(Slave),主庫只負責寫數據,每次有數據更新都將更新的數據同步到它所有的從庫,而從庫只負責讀數據。這樣一來,就有了兩個好處:

讀寫分離,不僅可以提高服務器的負載能力,並且可以根據讀請求的規模自由增加或者減少從庫的數量,棒極了;
數據被複製成了了好幾份,就算有一臺機器出現故障,也可以使用其他機器的數據快速恢復。

slaveof IP PORT

這裏寫圖片描述

sentinel redis 監控

1、 運行時修改master-slave

1> 命令該服務不做其他redis服務的slave
	命令: slaveof on none 
	
2> 動態配置, 修改其slave-read-only 

3> 命令該服務爲 masterA
	命令: slaveof ip port

2、 sentinel.config 配置

1. sentinel監聽端口,默認是26379,可以修改。
port 26379

2.sentinel monitor <master-name> <ip> <redis-port> <quorum>
告訴sentinel去監聽地址爲ip:port的一個master,這裏的master-name可以自定義,quorum是一個數字,指明當有多少個sentinel認爲一個master失效時,master纔算真正失效。master-name只能包含英文字母,數字,和“.-_”這三個字符需要注意的是master-ip 要寫真實的ip地址而不要用迴環地址(127.0.0.1)。
配置示例:
sentinel monitor mymaster 192.168.0.5 6379 2

3.sentinel auth-pass <master-name> <password>
設置連接master和slave時的密碼,注意的是sentinel不能分別爲master和slave設置不同的密碼,因此master和slave的密碼應該設置相同。
配置示例:
sentinel auth-pass mymaster 0123passw0rd

4.sentinel down-after-milliseconds <master-name> <milliseconds> 
這個配置項指定了需要多少失效時間,一個master纔會被這個sentinel主觀地認爲是不可用的。 單位是毫秒,默認爲30秒
配置示例:
sentinel down-after-milliseconds mymaster 30000

5.sentinel parallel-syncs <master-name> <numslaves> 
這個配置項指定了在發生failover主備切換時最多可以有多少個slave同時對新的master進行 同步,這個數字越小,完成failover所需的時間就越長,但是如果這個數字越大,就意味着越 多的slave因爲replication而不可用。可以通過將這個值設爲 1 來保證每次只有一個slave 處於不能處理命令請求的狀態。
配置示例:
sentinel parallel-syncs mymaster 1

6. sentinel failover-timeout <master-name> <milliseconds>
failover-timeout 可以用在以下這些方面: 
      1. 同一個sentinel對同一個master兩次failover之間的間隔時間。
      2. 當一個slave從一個錯誤的master那裏同步數據開始計算時間。直到slave被糾正爲向正確的master那裏同步數據時。
      3.當想要取消一個正在進行的failover所需要的時間。  
      4.當進行failover時,配置所有slaves指向新的master所需的最大時間。不過,即使過了這個超時,slaves依然會被正確配置爲指向master,但是就不按parallel-syncs所配置的規則來了。
配置示例:
sentinel failover-timeout mymaster1 20000

7.sentinel的notification-script和reconfig-script是用來配置當某一事件發生時所需要執行的腳本,可以通過腳本來通知管理員,例如當系統運行不正常時發郵件通知相關人員。對於腳本的運行結果有以下規則:
	若腳本執行後返回1,那麼該腳本稍後將會被再次執行,重複次數目前默認爲10
	若腳本執行後返回2,或者比2更高的一個返回值,腳本將不會重複執行。
	如果腳本在執行過程中由於收到系統中斷信號被終止了,則同返回值爲1時的行爲相同。
	一個腳本的最大執行時間爲60s,如果超過這個時間,腳本將會被一個SIGKILL信號終止,之後重新執行。
1).sentinel notification-script <master-name> <script-path> 
通知型腳本:當sentinel有任何警告級別的事件發生時(比如說redis實例的主觀失效和客觀失效等等),將會去調用這個腳本,這時這個腳本應該通過郵件,SMS等方式去通知系統管理員關於系統不正常運行的信息。調用該腳本時,將傳給腳本兩個參數,一個是事件的類型,一個是事件的描述。如果sentinel.conf配置文件中配置了這個腳本路徑,那麼必須保證這個腳本存在於這個路徑,並且是可執行的,否則sentinel無法正常啓動成功。
  配置示例:
 sentinel notification-script mymaster /var/redis/notify.sh
2).sentinel client-reconfig-script <master-name> <script-path>
 當一個master由於failover而發生改變時,這個腳本將會被調用,通知相關的客戶端關於master地址已經發生改變的信息。以下參數將會在調用腳本時傳給腳本:
       <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
目前<state>總是“failover”, <role>是“leader”或者“observer”中的一個。 參數 from-ip, from-port, to-ip, to-port是用來和舊的master和新的master(即舊的slave)通信的。這個腳本應該是通用的,能被多次調用,不是針對性的。
   配置示例:
   sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

redis.config 中通過配置 slave-priority 100 來設置優先級, 數字越小優先級越高

Redis 集羣模式

安裝

wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

wget http://rubygems.org/downloads/redis-3.3.0.gem

遇到的錯誤:

make報錯:
cd src && make all
make[1]: Entering directory /usr/local/redis-5.0.0/src' CC adlist.o In file included from adlist.c:34:0: zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory #include <jemalloc/jemalloc.h> ^ compilation terminated. make[1]: *** [adlist.o] Error 1 make[1]: Leaving directory/usr/local/redis-5.0.0/src’
make: *** [all] Error 2
解決辦法:
編輯src/.make-settings裏的OPT,改爲OPT=-O2 -march=x86-64

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章