redis操作/基礎/配置/持久化/主從架構/集羣(哨兵)

redis

監聽端口: 6379/tcp

Strings: 字符串
set NX|XX

   EX:過期時間 默認秒爲單位
   NX:如果key不存在,纔可設置key與value
   XX:如果key存在,纔可以設置key與value
  incr key (key爲整數)incr 依次增加1,(轉載數量+1)

del :刪除key (可刪除多個key)

key * :查看所有key值
    SET key value  設置k:v
    GET 獲取值
    INCR 爲鍵 key 儲存的數字值加上一
    DECR  爲鍵 key 儲存的數字值減去一
    EXITS

Lists: 列表

key:[list] key 的value 是一個列表
LPUSH/RPUSH 在列表左/右插入
LPOP/RPOP 列表殺出元素
LINDEX 指明索引位置獲取值
LSET 修改指定索引的值 lset key index value

創建列表 LPUSH key value 
查詢list 總數量 llen key

認證實現方法:

conf 文件中 line 500
auth 密碼

1).redis.conf
		requirepass PASSWORD
2).redis-cli
		AUTH PASSWORD

清空數據庫:

FLUSHDB  清空當前庫
FLUSHALL 清空所有庫

持久化

 RDB(快照)二進制格式 默認dump.rdb 命令save保存到磁盤
 配置文件:

RDB

 stop-write-on-bgsave-error yes //進行備份快照時,發生錯誤停止寫操作
 rdbcompression  yes //壓縮文件大小 會消耗CPU
 rdbchecksum yes //啓動redis時檢測校驗信息 會導致啓動慢,但是能判斷rdb文件是否有錯
 dbfilename dump.rdb //定義本分名稱
 dir /var/lib/redis  //默認備份文件路徑,可以用 conf get dir

save 900 1  #900秒內有1個數據改變將進行數據持久化
save 300 10 #300秒內有10個數據改變進行數據持久化
save 60	 10000 #60秒內有1W個數據被改變進行數據持久化

注意所謂單線程:站在客戶請求角度,只有一個線程來處理客戶請求,並非做任何事都是單線程。

  1、save 或 bgsave
       同步保存,會堵塞
   2、配置文件定義策略 9000 1 
       異步保存 不會堵塞
       缺點 :在保存前出現故障,中間寫入數據會丟失

AOF(添加命令類似於mysql二進制)

AOR: append only file 記錄每一次寫操作,至指定的文件尾部實現持久化,當redis重啓時,可通過重新執行文件中的命令在內存中重建數據庫,
BGREWRETEAOF: AOF文件重寫
	不會讀取正在使用的AOF文件,而是通過將內存中的數據以命令的方式保存到臨時文件中,完成之後替換原來的AOF文件
記錄每一次redis的寫入 (I/O)
     redis進程處理/合併 冗餘操作,由BGREWRITEAOF命令實現,但不會讀取現在使用的aof。

AOF重寫過程

1).redis主進程會fork出子進程
2).子進程根據redis內存中的數據創建數據庫重建命令倒序於臨時文件中
3).父進程繼續接收client的請求,並會把這些請求中的寫操作繼續追加至原來的AOF文件,額外這些新的寫請還會被放在一個緩衝隊列中,
4)目的,當子進程重寫完成,會通知父進程:父進程把緩衝中的命令寫到臨時文件中
5)父進程用臨時文件替換老的aof文件
	
注意:持久本身不能取代備份,還應該制定備份策略,對redis數據庫定期進行備份

AOF與RDB同時啓用

1、bgsave和bgrewriteaof,不會同時執行,避免io操作過大,某一時刻只允許一者執行。如果bgsave執行時,用戶手動bgrewriteaof,會返回ok,但是不會同時執行,bgsave結束後在執行bgrewriteaof
2、redis啓動恢復數據時優先使用aof

事務:(原子性,一致性,隔離性,持久性)

通過MUTI  EXEC  WATCH等命令實現事務功能,將一個或多個命令歸併爲一個操作請求服務器,按順序執行的機制,(不支持回滾)

MUTI:啓動一個事務(收集命令),所有的命令不會被執行,而是放到消息隊列中
EXEC:執行事務.當執行消息隊列中的命令時,當有別的請求時,將不會被處理,而是在執行完消息隊列中的命令後,纔會處理其他請求操作
	一次性將事務中的所有操作被執行完後返回給客戶端
WATH:
	樂觀鎖,
	在EXEC命令執行前,用於監視指定數量鍵,如果監視中的某任意鍵被修改,服務器不會執行命令,並將錯誤返回

Connection(連接)相關命令

127.0.0.1:6379> HELP @connection

	  AUTH password
	  summary: Authenticate to the server
	  since: 1.0.0

	  ECHO message
	  summary: Echo the given string
	  since: 1.0.0

	  PING [message]
	  summary: Ping the server
	  since: 1.0.0

	  QUIT -
	  summary: Close the connection
	  since: 1.0.0

	  SELECT index
	  summary: Change the selected database for the current connection
	  since: 1.0.0

Server相關命令

CLIENT  GETNAME
CLIENT KILL ip:port  指明ip+端口 關閉對應的客戶端信息
CLIENT SET 給一個連接設定名字
	
CONFIG REWRITE  將內存中對服務器配置文件同步到配置文件中
CONFIG RESETSTAT
	
DBSIZE 查看數據庫中的key有多少個
SLAVEOF host port 配置主從
SLOWLG 
SYNC 
	
	BGSAVE
	SAVE
	LASTSAVE  最後保存數據的時間

redis主從架構(實現讀寫分離)

概念:哨兵是一個獨立的進程,主庫基於pingcheck方式檢查從庫是否在線,如果在線直接同步數據文件致從服務器,從服務器端也可以主動發送請求到主服務端,主庫啓動持久化功能,會不斷的同步數據到磁盤上,主庫一旦收到從庫的同步請求,主庫會將內存中的數據同步給從庫,從庫收到數據以後保存到磁盤,然後加載到內存完成數據重建,鏈式複製(一主多從)同步也如此,因爲主是不區分正真的主,還是另外一個從

特點

1、一個master可以有多個slave
2、支持鏈式複製(一個slave也可以是其他slave的slave)
3、Master以非阻塞方式同步數據致slave,(master可以同時處理多個slave的讀寫請求,slave端在同步數據時也可以使用非阻塞方式)

主從配置 - 啓動方式:

slave端:slavaof master_ip master_port這樣這個就成了主庫
用info查看

sentinal(哨兵)

Redis配置哨兵模式

在這裏插入圖片描述
在這裏插入圖片描述

首先配置Redis的主從服務器,修改redis.conf文件如下

管理多個redis服務實現HA(高可用)
監控多個redis服務節點
# 使得Redis服務器可以跨網絡訪問
bind 0.0.0.0
# 設置密碼
requirepass "123456"
# 指定主服務器,注意:有關slaveof的配置只是配置從服務器,主服務器不需要配置
slaveof 192.168.11.128 6379
# 主服務器密碼,注意:有關slaveof的配置只是配置從服務器,主服務器不需要配置
masterauth 123456

配置3個哨兵,每個哨兵的配置都是一樣的。在Redis安裝目錄下有一個sentinel.conf文件,copy一份進行修改

# 禁止保護模式
protected-mode no
# 配置監聽的主服務器,這裏sentinel monitor代表監控,mymaster代表服務器的名稱,可以自定義,192.168.11.128代表監控的主服務器,6379代表端口,2代表只有兩個或兩個以上的哨兵認爲主服務器不可用的時候,纔會進行failover操作。
sentinel monitor mymaster 192.168.11.128 6379 2
# sentinel author-pass定義服務的密碼,mymaster是服務名稱,123456是Redis服務器密碼
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster 123456

進入Redis的安裝目錄的src目錄,通過下面的命令啓動服務器和哨兵

# 啓動Redis服務器進程
./redis-server ../redis.conf
# 啓動哨兵進程
./redis-sentinel ../sentinel.conf

哨兵模式的其他配置項
在這裏插入圖片描述

自動故障轉移

sentinel 也是一個分佈式系統,可以在架構中運行多個sentinel進程,多個進程之間使用“流言協議”,接收redis主節點是否離線,
並使用“投票協議”是否實現故障轉移,選擇哪一個redis的從服務器成爲主服務器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章