Redis簡介
中文網站: www.redis.cn
Redis是一款高性能的key/values分部署吧記憶體資料庫,支援資料持久化(定期把記憶體裡的資料存儲到硬碟)。
支援master-slave模式資料備份。
記憶體清除政策
volatile-lru #最近最少使用(針對設定了TTL的key)
allkeys-lru #删除最少使用的key(針對所有key)
allkeys-lfu #從所有key中清除使用頻率最少的key
volatile-lfu #從所有配置了過期時間的key中清除使用頻率最少的key
volatile-random #在設定了TTL的key中随機移除
allkeys-random #随機移除key
volatile-ttl (minor TTL) #移除最近過期的key
noeviction #不删除
Redis常用運維指令
127.0.0.1:6379> set {key_name} {value} #存資料
127.0.0.1:6379> get {key_name} #取資料
127.0.0.1:6379> mset {key_list} #存多個key
127.0.0.1:6379> mget #擷取多個key值
127.0.0.1:6379> select 資料庫編号(0~15) #切換庫
127.0.0.1:6379> keys * #顯示所有key(會周遊所有key)
127.0.0.1:6379> keys a? #顯示指定key
127.0.0.1:6379> exists {key_name} #測試key是否存在
127.0.0.1:6379> ttl key #檢視key生存時間
127.0.0.1:6379> type key #檢視key類型
127.0.0.1:6379> move key 庫編号 #移動key到指定庫
127.0.0.1:6379> expire key名 數字 #設定key有效時間
127.0.0.1:6379> del key名 #删除指定key
127.0.0.1:6379> flushall #删除記憶體裡的所有key
127.0.0.1:6379> flushdb #删除所在庫的所有key
127.0.0.1:6379> save #儲存所有key到硬碟
127.0.0.1:6379> shutdown #停止服務
127.0.0.1:6379> cluster info #檢視叢集資訊
127.0.0.1:6379> cluster nodes #檢視叢集節點資訊
127.0.0.1:6379> info memory #檢視記憶體使用
127.0.0.1:6379> dbsize #傳回目前資料庫key的總值(不會周遊所有key)
連接配接redis服務
$ redis-cli -h 192.168.2.22 -p 2379
127.0.0.1:6379> auth lidabai666 #輸入密碼
-h:指定redis服務位址;
-p:指定redis服務端口号(預設6379)
-a:指定redis連接配接密碼(不建議在指令行指定,連接配接後再使用auth指定)
-c:叢集模式
127.0.0.1:6379> slowlog get
檢視逾時參數值:
127.0.0.1:6379> config get timeout
檢視連接配接數
127.0.0.1:6379> info clients
# Clients
connected_clients:1
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:24
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
redis修改密碼
127.0.0.1:6379> config set requirepass "new_password"
讀取redis密碼資訊
127.0.0.1:6379> config get requirepass
這個時候這個密碼沒有重新整理到配置檔案中,如果redis重新開機,會丢失這個密碼,為了持久生效,需要繼續使用config的rewrite指令,這個指令會将目前的修改重新整理到配置檔案中,執行完這個指令後斷開和重新開機都不會丢失這個密碼了。
127.0.0.1:6379> config rewrite
主從複制
主從複制結構模式
- 1主1從
- 1主n從
-
主從從
Redis服務運作後,預設都是master伺服器。
工作原理
Slave向master發送sync指令
Master啟動背景存盤程序并收集所有修改資料指令;
Master完成背景存盤後,傳送整個資料檔案到slave;
Slave接收資料檔案,加載到記憶體中完成首次完全同步;
後續有新資料産生時,Master繼續收集資料修改指令依次傳送給slave,完成同步。
配置從庫
127.0.0.1:6379> info replication #檢視複制資訊
# Replication
role:master #角色
connected_slaves:0
master_failover_state:no-failover
master_replid:0e9cbb4a818718b1e0f5646d489d5a0bfa9f74f5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:0
指令行指定主庫(臨時)
127.0.0.1:6379> slaveof 主庫IP 主庫端口
配置檔案指定主庫(永久)
$ cat /etc/redis/6379.conf
Slaveof 主庫IP 主庫端口
反客為主(将從庫恢複為主庫)
指令行臨時設定
127.0.0.1:6379> slaveof no one
永久配置
$ cat /etc/redis/6379.conf
哨兵服務
哨兵服務介紹
監視master伺服器,當發現master當機後,将從伺服器更新為主伺服器。
配置哨兵服務
- 安裝redis服務
- 建立主配置檔案
- 啟動哨兵服務
$ vim /etc/sentinel.conf
sentinel monitor 主機名 IP位址 端口 票數
bind 0.0.0.0
sentinel auth-pass 主機名 密碼
$ 重新開機服務
票數: 發現主庫當機的哨兵伺服器台數
資料持久化
RBD
Redis資料庫檔案(RedisDataBase)
資料持久化方式之一(預設),按照指定時間間隔,将記憶體中的資料集快照寫入磁盤。
RBD優點
高性能的持久化實作,建立一個子程序來執行持久化,先将資料寫入臨時檔案,持久化過程結束後,再用該臨時檔案替換上次持久化好的檔案。過程主程序不做任何IO操作。
比較适合大規模資料恢複,且對資料完整性要求不高的場合。
RBD缺點
意外當機時,丢失最後一次持久化的所有資料。
1)定義RBD檔案名
dbfilename "dump.rbd"
2)備份資料
備份dump.rbd檔案到其它位置
$ cp $PATH/dump.rbd 備份目錄
3)恢複資料
拷貝備份檔案到資料庫目錄,啟動redis服務。
$ cp 備份目錄/dump.rbd 資料庫目錄/
AOF
Append Only File
追加方式記錄寫操作的檔案,記錄redis服務所有寫操作,不段的将新的寫操作追加到檔案的末尾。預設沒有啟用,使用cat指令可以檢視檔案内容。
AOF優點:可以靈活的設定持久化方式,出現意外當機時,僅可能丢失1秒的資料。
AOF缺點:持久化檔案的體積通常會大于RBD方式,執行fsync政策的速度可能比RBD方式慢。
1)啟用AOF
> config set appendonly yes
> config rewrite #寫進配置檔案
2)備份資料
$ cp 資料庫目錄/appendonly.aof 備份目錄
3)資料恢複
cp備份檔案到資料庫目錄,啟動redis服務。
4)優化配置
定義檔案名
appendonly yes #啟用aof
appendfilename "appendonly.aof" #指定檔案名
AOF檔案記錄寫操作的方式
appendfsync always #實時記錄,并完成磁盤同步
appendfsync everysec #每秒記錄一次,并完成磁盤同步
appendfsync no #寫入aof,不執行磁盤同步
日志重寫
auto-aof-rewrite-min-size 64mb #首次重寫觸發值
auto-aof-rewrite-percentage 100 #再次重寫,增長百分比
修複AOF檔案
把檔案恢複到最後一次的正确操作
$ redis-check-aof --fix appendonly.aof