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的從服務器成爲主服務器