快速搭建redis主從結構
1. 工作原理
- slave向master發送sync命令
- master啓動後臺存盤進程,並收集所有修改數據命令
- master完成後臺存盤後,傳送整個數據文件到slave
- slave接收數據文件,加載到內存中完成首次完全同步
- 後續有新數據產生時,master繼續收集數據修改命令依次傳給slave,完成同步
1.1 配置redis主從
>slaveof 主ip 主端口
>info replication //查看複製信息
role: //角色
master_lost://主庫ip地址
master_port://主庫端口號
master_link_status://與主庫連接狀態
]# vim /etc/redis/6379.conf
282 slaveof 主ip 主端口
1.1.1反客爲主,恢復主服務器
> slaveof no one //命令行臨時設置
]# vim /etc/redis/6379.conf
...
slaveof 192.168.1.11 6311 //永久配置
1.1.2密碼驗證
修改配置文件/etc/redis/6379.conf
requirepass 123456 //定義連接密碼
192.168.4.52:6352> CONFIG get masterauth
1) "masterauth"
2) ""
192.168.4.52:6352> CONFIG set masterauth "123456"
OK
192.168.4.52:6352> CONFIG get masterauth
1) "masterauth"
2) "123456"
192.168.4.52:6352> config rewrite
1.2 哨兵服務
1 安裝源碼redis軟件
2 編寫主配置文件
]# vim /etc/sentinel.conf
bind
sentinel monitor redisser 192.168.1.13 6313 1
:wq
3 啓動哨兵服務
]# redis-sentinel /etcsentinel.conf
4 測試配置
停止主服務器192.168.4.53的redis服務
數據類型
1.String字符串
set 賦值 | setrange 修改特定位的值 | strlen key 統計長度 | getrange key start end 獲取字符串
set key value [ex seconds] [px milliseconds] [nx|xx]
- 設置key及值,過期時間可以使用秒或者毫秒爲單位
setrange key offset value
- 從偏移量開始複寫key的特定位的值
> set first "hello world"
> setrange first 6 "Redis" //改寫爲hello Redis
strlen key, 統計字串長度
> strlen first
getrange key start end
- 返回字串值中的子字串,截取範圍爲start和end
- 負數偏移量表示從末尾開始計數,-1表示最後一個字符,-2表示倒數第二個字符
> set list "hello,the world"
> getrange list -5 -1
> getrange list 0 -1
append 追加 | setbit key offset value 位存儲 | bitcount key 統計個數
append key value
- 存在則追加,不存在則創建key及value,返回key長度
> append myname jacob
setbit key offset value
- 對key所存儲字串,設置或清除特定偏移量上的位(bit)
- value的值可以爲1或者0,offset爲0~2^32之間
- key不存在,則創建新key
> setbit bit 1 1 //設置bit第1位爲1
> setbit bit 2 0 //設置bit第2位爲0
bitcount key
- 統計字串中被設置爲1的比特位數量
場景說明:記錄網站用戶上線頻率,如用戶A上線了多少天等類似的數據
如用戶在某天上線,則使用setbit,以用戶名爲key,講網站上線日爲offset,並在該offset上設置1,最後計算用戶總上線次數時,使用bitcount用戶名即可.
這樣即使網站運行10年,每個用戶僅佔用10*365比特位即456字節
2.List列表
Redis的list是一個字符隊列
先進後出
一個key可以有多個值
lpush 新建/插入 | lrange 範圍讀取 | lset 修改
lpush key value [v1 v2 v3 ...]
- 將一個或多個值value插入到列表key的表頭,注意順序,往左邊加入!!!
- key不存在,則創建key
> lpust list a b c d e f g //list的值一次爲gfedcba(往左添加)
lrange key start stop
- 從開始位置讀取key的值到stop結束
> lrange list 0 -1 //讀取全部,從左到右
lset key index value
- 將key中index位置的值修改爲value
lpop 移除 | llen 長度 | index 下標 |
lpop key
- 移除並返回列表頭元素數據,key不存在則返回nil
> lpop list //刪除表頭元素,可以多次執行
llen key
- 返回列表key的長度
lindex key index
- 返回列表中第index個值
rpush 插入 | rpop 刪除 | 往右邊添加
rpush key value [v1 v2 v3 ...]
- 將value插入到key的末尾
> rpush list a b c d e
rpop key
- 刪除並返回key末尾的值
3.Hash表
Redis hash
- 是一個string類型的field和value的映射表
- 一個key可以對應多個field,一個field對應一個value
- 將一個對象存儲爲hash類型,較於每個字段都存儲成string類型更能節省內存
hset 賦值 | hget 取值 | hmset hmget 批量 | hkeys 返回所有field名稱 | |
hset key field value
- 將hash表中field值設置爲value
hget key field
- 獲取hash表中field的值
hmet key field value [field value ...]
- 同時給hash表中的多個field賦值
> hmset site google baidu www.g.cn qq.com wx.qom
hmget key field [field...]
- 返回hash表中多個field的值
> hmget site google baidu
hkeys key
- 返回hash表中所有field名稱
> hmset site google www.g.cn baidu wx.com
> hkeys site
| hgetall 取值 | hvals 返回所有field值 | hdel 刪除 |
hgetall key
- 返回hash表中所有field的值
hvals key
- 返回hash表中所有field的值
hdel key field [field...]
- 刪除hash表中多個field的值,不存在則忽略
> hdel site google baidu
RDB與AOF
1.RDB相關介紹
Redis數據庫文件,全稱 Redis DataBase
– 數據持久化方式之一
– 數據持久化默認方式
– 按照指定時間間隔,將內存中的數據及快照寫入硬盤
定義RDB文件名
– dbfilename “dump.rdb” //文件名
1.1 備份與恢復
備份數據
– 備份dump.rdb文件到其他位置
]# cp 數據庫目錄/dump.rdb 備份目錄
恢復數據
– 拷貝備份文件到數據庫目錄,啓動redis服務
]# cp 備份目錄/dump.rdb 數據庫目錄/
1.2 優化設置
數據從內存保存到硬盤的頻率
– save 900 1 //15分鐘且有1個key改變即存盤
– save 300 10 //5分鐘且有10個key改變即存盤
– save 60 10000 //1分鐘且有10000個key改變即存盤
手動存盤
– save //阻塞寫存盤,存盤時不可讀取
– bgsave //不阻塞寫存盤
2. AOF相關介紹
Append Only File
- 追加方式記錄寫操作的文件
- 記錄redis服務所有寫操作
- 不斷的將新的操作,追加到文件的末尾
- 默認沒有啓用
- 使用cat命令可以查看文件內容
2.1 優缺點
AOF優點
-- 可以靈活設置持久化方式
-- 出現意外宕機時,儘可能丟失1秒的數據
AOF缺點
-- 持久化文件的體積通常會大於RDB方式
-- 執行fsync策略時的速度可能會比RDB方式慢
2.2 啓用AOF
> config set appendonly yes //啓用
> config rewrite //寫進配置文件
2.3 AOF恢復數據
備份數據
- 備份appendonly.aof文件到其他位置
]# cp 數據庫目錄/appendonly.aof 備份目錄
恢復數據
- 拷貝備份文件到數據庫目錄
- 啓動redis服務
]# cp 備份目錄/appendonly.aof 數據庫目錄
]# /etc/redis/redis_端口 start
2.4 AOF優化配置
- 定義文件名
– appendonly yes //啓用aof,默認no
– 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