非關係型數據庫,基於K/V存儲,存儲於內存的數據庫. 每個數據項都由KEY和VALUE組成。V能夠是字符串,列表,關聯數組(hashs),集合,有序集合。使用key來引用這些值。 redis是單進程的。多核cpu對redis無用。但能夠運行多實例。 支持持久化存儲。 支持主從複製。 主 rw 從 read-only
1:交互式接口的命令
2:主從如何實現
3:高可用如何實現sentnal(專用於實現redis高可用)node
此節命令重要的有五個:string list hash set sorted_setredis
redis包在epl倉庫中。直接使用yum安裝便可算法
監聽端口:6379/tcp數據庫
在未給redis配置帳號密碼時。僅支持本地鏈接
redis-cli :便可鏈接至redisvim
redis-cli -h 172.16........ –p 端口 -a 密碼數組
redis 默認有16個數據庫,使用數字標識。
select:切換數據庫安全
help 查看 幫助命令的具體使用服務器
help @string能夠獲取string的全部命令幫助使用信息
設定:SET key value [EX seconds] [PX milliseconds] [NX|XX]網絡
[EX seconds] 過時時間。數據是存於內存中的 NX 只有不存在時,纔去建立這個值
獲取:GET key
追加:APPEND key value
自增:DECR keyapp
DECRBY key increment
自減:INCR key
INCRBY key increment
多設定:MSET
多獲取: MGET
獲取字段長度:STRLEN key
eg:
設定 獲取 追加的使用
數值: 設定 自增 自減 自增多少 自減多少
設定: LSET key index value
依據索引去設定值
左增:LPUSH key value [value ...]
右增:PUSH key value [value ...]
右減:RPOP key
左減:LPOP key
左側第幾個位置刪除數值:LREM key count value 此種用的很少
插入:LINSERT key BEFORE|AFTER pivot value
查看:LINDEX key index
設定:HSET key field value
HMSET key field value [field value ...] 一次 給一個key 設定多個值
查看信息HKEYS key
查看值 HVALS key
刪除信息:HDEL key field [field ...]
定義集合:SADD key member [member ...]
交集:SINTER key [key ...]
並集:兩個集合的並集 SUNION key [key ...]
差集:SDIFF key [key ...]
前面的key有 然後面的key沒有的
刪除集合中的成員:SREM key member [member ...]
隨機彈出集合中的一個元素:SPOP key [count]
查看:SMEMBERS key
交集後存入另外一個集合;SINTERSTORE destination key [key ...]
並集後存入另外一個集合SUNIONSTORE destination key [key ...]
與無序集合 相比 。多了元素的下標
添加: ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
集合內元素的個數:ZCARD key
指定範圍內元素的個數:ZCOUNT key min max
獲取元素的下標:ZSCORE key member
獲取元素的索引:ZRANK key member
列出集合內的元素:ZRANGE key start stop [WITHSCORES]
當向集合內添加元素時,內部默認會給每一個元素增長一個內部的index
訂閱:PSUBSCRIBE pattern [pattern ...]
訂閱子頻道
發佈信息:PUBLISH channel message
獲取狀態:PUBSUB subcommand [argument [argument ...]]
取消訂閱:PUNSUBSCRIBE [pattern [pattern ...]]
訂閱:SUBSCRIBE channel [channel ...]
啓動一個事務:MULTI –
運維不多用到此功能
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
1)編輯配置文件:
#vim /etc/redis.conf
加入:requirepass mashuai
2)重啓redis服務
3)鏈接 redis-cli
不輸入密碼登陸時 是不能夠 輸入命令的
4)認證
help @server 查看server端的命令
info: server
client replication 從節點的相關信息
info client
info cpu
info memory
2)flushdb
清空某個數據庫
3) CLIENT LIST
列出當前登陸的客戶端
核心配置:Limits相關的配置:
網絡配置項 NETWORK 持久化相關配置 SNAPSHOTTING
配置和使用Redis: 基本配置項 GENERAL 網絡配置項 持久化相關配置 SNAPSHOTTING 另一個持久化的配置 APPEND ONLY MODE 主從複製相關的配置 REPLICATION 安全相關配置 Limit相關的配置 SlowLog相關的配置 INCLUDES Advanced配置
[root@h~]#grep -i "^##" /etc/redis.conf
通用配置項:GENERAL
daemonize, supervised, loglevel, pidfile, logfile, databases:設定數據庫數量,默認爲16個,每一個數據庫的名字均爲整數,從0開始編號,默認操做的數據庫爲0; 切換數據庫的方法: SELECT <dbid>
網絡配置項:
bind IP port PORT protected-mode tcp-backlog unixsocket timeout:鏈接的空閒超時時長;
bind: 監聽在本機哪一個網卡的ip網絡地址上
bind 172.16.253.96
安全配置:
requirepass <PASSWORD>
Limits相關的配置:
maxclients maxmemory <bytes> maxmemory-policy noeviction 淘汰策略:volatile-lru,設置lru時間的鍵 volatile-ttl,離淘汰時間最近的鍵淘汰 allkeys-lru, volatile-random, allkeys-random, noeviction maxmemory-samples 5 淘汰算法運行時的採樣樣本數;
SlowLog相關的配置:
slowlog-log-slower-than 10000 單位是微秒; slowlog-max-len 128 SlowLog記錄的日誌最大條目
ADVANCED配置:
hash-max-ziplist-entries 512 hash-max-ziplist-value 64 設置ziplist的鍵數量最大值,每一個值的最大空間; client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 <hard-limit> <soft-limit> 超出 64m後 在60秒內清除 <soft-limit seconds>
redis的配置參數 容許 運行時修改
能夠不用更改配置文件 CONFIG GET CONFIG RESETSTAT 重置各類狀態 CONFIG REWRITE :利用內存中的設定 重寫至 配置文件 CONFIG SET
redis是基於內存的存儲
redis的全部數據都是在內存中運行
重啓服務後,內存中的全部數據將沒有。
持久化:將數據保存在磁盤上,但不是基於磁盤提供服務
兩種實現方式:
按事先定製的策略,週期性地將數據從內存同步至磁盤;數據文件默認爲dump.rdb;
/var/lib/redis/dumo.rdb
客戶端顯式使用SAVE或BGSAVE命令來手動啓動快照保存機制;
SAVE:同步,即在主線程中保存快照,此時會阻塞全部客戶端請求; BGSAVE:異步;後臺同步,主程序能夠繼續向客戶端提供請求
RDB相關的配置:
*save <seconds> <changes> save 900 1 save 300 10 save 60 10000 表示:三個策略知足其中任意一個均會觸發SNAPSHOTTING操做;900s內至少有一個key有變化,300s內至少有10個key有變化,60s內至少有1W個key發生變化;
stop-writes-on-bgsave-error yes
dump操做出現錯誤時(不能向磁盤中同步數據時),是否禁止新的寫入操做請求;
rdbcompression yes 是否支持壓縮,當cpu有較大空閒時,能夠啓動此選項
rdbchecksum yes 每次同步完以後,是否對RDB文件作檢查
dbfilename dump.rdb:指定rdb文件名
*dir /var/lib/redis:rdb文件的存儲路徑。生產中建議將此文件存儲於其餘固態硬盤上。
記錄每次寫操做至指定的文件尾部實現的持久化;當redis重啓時,可經過從新執行文件中的命令在內存中重建出數據庫;
BGREWRITEAOF:AOF文件重寫;
執行此命令,實現AOF文件重寫(合併多條命令至一條命令,這就叫作AOF文件重寫) 不會讀取正在使用AOF文件,而是經過將內存中的數據以命令的方式保存至臨時文件中,完成以後替換原來的AOF文件;
啓用AOF:
1) 配置文件 appendonly yes 2)命令行 CONFIG SET appendonly yes 此項啓用後會生成 /var/lib/redis/appendonly.aof文件
appendfsync: 內存中的數據發生改變,什麼時候向磁盤中同步數據
Redis supports three different modes: no:redis不執行主動同步操做,而是內核決定什麼時候執行; everysec:每秒一次;當redis出現故障時,有可能會丟失部分數據 always:每語句一次;此種模式,會對系統I/O形成極大的壓力 可是,保證了數據的安全性
默認使用everysec模式
no-appendfsync-on-rewrite no
是否在後臺執行aof重寫期間不調用fsync,默認爲no,表示調用; 保證數據的安全性
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb 重寫知足的條件,方會啓動重寫,重寫是爲了恢復數據更高效
上述兩個條件同時知足時,方會觸發重寫AOF;與上次aof文件大小相比,其增加量超過100%,且大小很多於64MB;
aof-load-truncated yes redis崩潰時,從新恢復redis後,從磁盤中aof文件從新構建數據至內存後,要不要把aof文件刪除。
建議不要同時啓用RDB及AOF
RDB與AOF同時啓用:
(1) BGSAVE和BGREWRITEAOF不會同時進行; (2) Redis服務器啓動時用持久化的數據文件恢復數據,會優先使用AOF;
特色: 一個Master能夠有多個slave主機,支持鏈式複製; Master以非阻塞方式同步數據至slave主機; 配置slave節點: redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT> 與主節點相連 redis-cli> CONFIG SET masterauth <PASSWORD> 寫入與主節點相連的密碼
其餘配置參數:
配置參數:
*slaveof *masterauth slave-serve-stale-data yes 主節點出問題時,是否使用本機數據提供服務 slave-read-only yes 從節點是 只讀的 *repl-diskless-sync no 快照先存於磁盤,再發送給從節點 no, Disk-backed, Diskless 新的從節點或某較長時間未能與主節點進行同步的從節點從新與主節點通訊,須要作「full synchronization",
此時其同步方式有兩種style:
Disk-backend:主節點新建立快照文件於磁盤中,然後將其發送給從節點; Diskless:主節佔新建立快照後直接經過網絡套接字文件發送給從節點;爲了實現並行複製,一般須要
在複製啓動前延遲一個時間段;
repl-diskless-sync-delay 5 repl-ping-slave-period 10 *repl-timeout 60 repl-disable-tcp-nodelay no repl-backlog-size 1mb
*slave-priority 100
複製集羣中,主節點故障時,sentinel應用場景中的主節點選舉時使用的優先級;數字越小優先級越高,但0表示不參與選舉; min-slaves-to-write 3:主節點僅容許其可以通訊的從節點數量大於等於此處的值時接受寫操做; min-slaves-max-lag 10:從節點延遲時長超出此處指定的時長時,主節點會拒絕寫入操做;
環境: 96 主節點 97 98 從節點
配置文件: bind 0.0.0.0
requirepass mashuai
使用命令 與 主節點實現相連
1)鏈接至本機 redis
redis-cli
2)
[root@h~]#redis-cli
127.0.0.1:6379> SLAVEOF 172.16.253.96 6379
OK
127.0.0.1:6379> CONFIG SET masterauth mashuai
OK
127.0.0.1:6379> CONFIG REWRITE
OK
3)測試
get name
"tom lucylili"
1)
更改配置文件:實現
vim /etc/redis.conf
slaveof 172.16.253.96
masterauth mashuai
2) 重啓redis 服務 測試
查看鏈接的從節點
info replication
主要完成三個功能:監控、通知、自動故障轉移 選舉:流言協議、投票協議
port 26379 sentinel monitor <master-name> <ip> <redis-port> <quorum> sentinel auth-pass <master-name> <password> <quorum>表示sentinel集羣的quorum機制,即至少有quorum個sentinel節點同時斷定主節點故障時,才認爲其真的故障。 quorum的數值依據redis集羣中的節點數來決定; s_down: subjectively down o_down: objectively down sentinel down-after-milliseconds <master-name> <milliseconds> 監控到指定的集羣的主節點異常狀態持續多久方纔將標記爲「故障」; sentinel parallel-syncs <master-name> <numslaves> 指在failover過程當中,可以被sentinel並行配置的從節點的數量; sentinel failover-timeout <master-name> <milliseconds> sentinel必須在此指定的時長內完成故障轉移操做,不然,將視爲故障轉移操做失敗;故障轉移超時時間 sentinel notification-script <master-name> <script-path> 通知腳本,此腳本被自動傳遞多個參數;
鏈接至sentinel端口,查看相關信息
redis-cli -h SENTINEL_HOST -p SENTINEL_PORT redis-cli> SENTINEL masters 監聽的主節點 SENTINEL slaves <MASTER_NAME> 從節點信息 SENTINEL failover <MASTER_NAME> 手動down掉主節點 SENTINEL get-master-addr-by-name <MASTER_NAME>
主節點故障時,服務切換至從節點
95 96 97 主機配置文件更改以下 : /etc/redis-sentinel.conf
bind 0.0.0.0
sentinel monitor mymaster 172.16.253.96 6379 2
監測的主節點
sentinel auth-pass mymaster mashuai
主節點遠程鏈接的密碼
sentinel down-after-milliseconds mymaster 5000
主節點多長時間鏈接不上時標記位DOWN
sentinel failover-timeout mymaster 18000
故障轉移超時時間,默認爲3分鐘,此處改成18秒
systemctl start redis-sentinel
查看日誌:
redis-cli -h 172.16.253.96 -p 26379
sentinel masters 主節點信息
sentinel slave mymaster 從節點信息
主動down掉 主節點
sentinel failover mymaster
以後 會自動提高一個從節點 爲主節點