Linux 安裝redis 基本配置 釋出訂閱,安全配置,持久化 rdb ,aof centos下redis安全相關
1.yum 原始碼 rpm
yum 快速,間接,高效,解決依賴關係,(自動安裝到某個路徑,不可控),通過yum安裝的軟體查詢命令
rpm -ql nginx
yum源的軟體包可能版本非常低
原始碼安裝,可擴充套件第三方的功能(可以指定目錄安裝, configure --prefix=/opt/python36/)
可以通過官網的最新程式碼,進行編譯安裝
通過原始碼安裝
1.線上下載redis原始碼包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓縮redis原始碼包,如果原始碼包帶有.gz結尾,需要通過gzip指令擴充套件,也就是-z的引數
tar -zxvf redis-4.0.10.tar.gz #解壓縮這個檔案,且顯示解壓縮過程
3.切換目錄到redis原始碼包
cd redis-4.0.10
4.由於redis沒有configure指令碼,直接就有了makefile,因此可以直接編譯且安裝
make #編譯
make install #安裝
#此兩條命令可以縮寫為一條, make && make install
5.編譯安裝完成後,redis預設會將redis命令新增到環境變數中/usr/local/bin底下
6.啟動redis服務端,自定義一個redis.conf
cp redis.conf redis.conf.back
mkdir -p /data/6379
vim redis.conf ,寫入以下內容(不要加上註釋)
port 6379
daemonize no #後臺執行redis
pidfile /data/6379/redis.pid #將redis程序的id寫入到redis.pid這個檔案
loglevel notice #日誌級別
logfile "/data/6379/redis.log"
dir /data/6379 #配置redis資料存放點
protected-mode yes #redis3.0之後的安全模式
requirepass qiangdademima #給redis新增密碼
redis的安全模式,可能會阻擋你遠端連線,為了解決這個安全模式,給redis設定一個密碼
7.redis的多例項功能,可以在一個機器上,啟動多個redis服務端
1.準備一個新的配置檔案,redis預設支援多例項,再準備一個新的配置檔案redis-6380.conf,內容如下:
port 6380
bind 0.0.0.0
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dir /data/6380
protected-mode yes
requirepass zeiqiangdademima
2.啟動第二個redis例項(第二個資料庫)
redis-server redis-6380.conf
redis-cli -p 6380
8.通過命令查詢redis的密碼引數
CONFIG get requirepass
*********************************************************************************************************
redis釋出訂閱 1.一個釋出者,多個訂閱者
2.支援正則的匹配訂閱者
-a 引數意思是指定redis的密碼登入
redis-cli -a qiangdademima #啟動1個redis客戶端 (訂閱者1)
SUBSCRIBE 頻道名字
PSUBSCRIBE 頻道名* redis-cli -a qiangdademima #啟動2個redis客戶端(訂閱者2)
SUBSCRIBE 頻道名字
PSUBSCRIBE 頻道名*
redis-cli -a qiangdademima #啟動3個redis客戶端(釋出者)
PUBLISH 頻道名字 想傳送的訊息
PUBLISH 頻道名字* 傳送的訊息
****************************************************************************************************
redis持久化之rdb與aof rdb模式
1.在配置檔案中寫入引數,支援rdb模式
vim redis.conf port 6379
bind 0.0.0.0
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dir /data/6379
protected-mode yes
requirepass qiangdademima
dbfilename dbmp.rdb
save 900 1
save 300 10
save 60 10000 2.啟動redis服務端,此時可以設定redis的key,通過save命令觸發rdb持久化 aof模式 1.vim redis.conf #寫入以下 daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dbmp.rdb
requirepass redhat
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec #每秒做一次持久化 2.啟動redis-server服務端,預設就會生成appendonly.aof持久化檔案
此時進入redis-cli的操作,都會被記錄,且追加到appendonly.aof檔案中,以達到持久化的操作
redis 持久化方式有哪些?有什麼區別? rdb:基於快照的持久化,速度更快,一般用作備份,主從複製也是依賴於rdb持久化功能 aof:以追加的方式記錄redis操作日誌的檔案。可以最大程度的保證redis資料安全,類似於mysql的binlog
redis
Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體
yum安裝redis
1.yum安裝
#前提得配置好阿里雲yum源,epel源 #檢視是否有redis包 yum list redis
#安裝redis
yum install redis -y
#安裝好,啟動redis
systemctl start redis
2.檢測redis是否工作
redis-cli #redis 客戶端工具 #進入互動式環境後,執行ping,返回pong表示安裝成功 127.0.0.1:6379> ping PONG
原始碼安裝redis,編譯安裝
大家用過yum,是相當省事好用吧,為什麼還要學習原始碼安裝?
有人說編譯安裝效能好?錯
編譯安裝的優勢是:
- 編譯安裝時可以指定擴充套件的module(模組),php、apache、nginx都是一樣有很多第三方擴充套件模組,如mysql,編譯安裝時候,如果需要就定製儲存引擎(innodb,還是MyIASM)
- 編譯安裝可以統一安裝路徑,linux軟體約定安裝目錄在/opt/下面
- 軟體倉庫版本一般比較低,編譯原始碼安裝可以根據需求,安裝最新的版本
1.下載redis原始碼 wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓縮
tar -zxf redis-4.0.10.tar.gz
3.切換redis原始碼目錄
cd redis-4.0.10.tar.gz
4.編譯原始檔
make
5.編譯好後,src/目錄下有編譯好的redis指令
6.make install 安裝到指定目錄,預設在/usr/local/bin
redis可執行檔案
./redis-benchmark //用於進行redis效能測試的工具 ./redis-check-dump //用於修復出問題的dump.rdb檔案 ./redis-cli //redis的客戶端 ./redis-server //redis的服務端 ./redis-check-aof //用於修復出問題的AOF檔案 ./redis-sentinel //用於叢集管理
啟動redis服務端
啟動redis非常簡單,直接./redis-server就可以啟動服務端了,還可以用下面的方法指定要載入的配置檔案: ./redis-server ../redis.conf
預設情況下,redis-server會以非daemon的方式來執行,且預設服務埠為6379。
使用redis客戶端
#執行客戶端命令即可進入 ./redis-cli #測試是否連線上redis 127.0.0.1:6379 > ping 返回pong代表連線上了 //用set來設定key、value 127.0.0.1:6379 > set name "chaoge" OK //get獲取name的值 127.0.0.1:6379 > get name "chaoge"
redis資料結構
redis是一種高階的key:value儲存系統,其中value支援五種資料型別 字串(strings) 雜湊(hashes) 列表(lists) 集合(sets) 有序集合(sorted sets)
資料結構示例
1.strings型別
- set 設定key
- get 獲取key
- append 追加string
- mset 設定多個鍵值對
- mget 獲取多個鍵值對
- del 刪除key
- incr 遞增+1
- decr 遞減-1
127.0.0.1:6379> set name 'yu' #設定key OK 127.0.0.1:6379> get name #獲取value "yu" 127.0.0.1:6379> set name 'yuchao' #覆蓋key OK 127.0.0.1:6379> get name #獲取value "yuchao" 127.0.0.1:6379> append name ' dsb' #追加key的string (integer) 10 127.0.0.1:6379> get name #獲取value "yuchao dsb" 127.0.0.1:6379> mset user1 'alex' user2 'xiaopeiqi' #設定多個鍵值對 OK 127.0.0.1:6379> get user1 #獲取value "alex" 127.0.0.1:6379> get user2 #獲取value "xiaopeiqi" 127.0.0.1:6379> keys * #找到所有key 1) "user2" 2) "name" 3) "user1" 127.0.0.1:6379> mget user1 user2 name #獲取多個value 1) "alex" 2) "xiaopeiqi" 3) "yuchao dsb" 127.0.0.1:6379> del name #刪除key (integer) 1 127.0.0.1:6379> get name #獲取不存在的value,為nil (nil) 127.0.0.1:6379> set num 10 #string型別實際上不僅僅包括字串型別,還包括整型,浮點型。redis可對整個字串或字串一部分進行操作,而對於整型/浮點型可進行自增、自減操作。 OK 127.0.0.1:6379> get num "10" 127.0.0.1:6379> incr num #給num string 加一 INCR 命令將字串值解析成整型,將其加一,最後將結果儲存為新的字串值,可以用作計數器 (integer) 11 127.0.0.1:6379> get num "11" 127.0.0.1:6379> decr num #遞減1 (integer) 10 127.0.0.1:6379> decr num #遞減1 (integer) 9 127.0.0.1:6379> get num "9"
2.list型別
- lpush 從列表左邊插
- rpush 從列表右邊插
- lrange 獲取一定長度的元素 lrange key start stop
- ltrim 擷取一定長度列表
- lpop 刪除最左邊一個元素
- rpop 刪除最右邊一個元素
- lpushx/rpushx key存在則新增值,不存在不處理
lpush duilie 'alex' 'peiqi' 'ritian' #新建一個duilie,從左邊放入三個元素 llen duilie #檢視duilie長度 lrange duilie 0 -1 #檢視duilie所有元素 rpush duilie 'chaoge' #從右邊插入chaoge lpushx duilie2 'dsb' #key存在則新增 dsb元素,key不存在則不作處理 ltrim duilie 0 2 #擷取佇列的值,從索引0取到2,刪除其餘的元素 lpop #刪除左邊的第一個 rpop #刪除右邊的第一個
3.sets集合型別
redis的集合,是一種無序的集合,集合中的元素沒有先後順序。
集合相關的操作也很豐富,如新增新元素、刪除已有元素、取交集、取並集、取差集等。我們來看例子:
- sadd/srem 新增/刪除 元素
- sismember 判斷是否為set的一個元素
- smembers 返回集合所有的成員
- sdiff 返回一個集合和其他集合的差異
- sinter 返回幾個集合的交集
- sunion 返回幾個集合的並集
sadd zoo wupeiqi yuanhao #新增集合,有三個元素,不加引號就當做字串處理 smembers zoo #檢視集合zoo成員 srem zoo wupeiqi #刪除zoo裡面的alex sismember zoo wupeiqi #返回改是否是zoo的成員資訊,不存在返回0,存在返回1 sadd zoo wupeiqi #再把wupeiqi加入zoo smembers zoo #檢視zoo成員 sadd zoo2 wupeiqi mjj #新增新集合zoo2 sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中沒有的元素 sdiff zoo2 zoo #找出zoo2中有,而zoo沒有的元素 sinter zoo zoo1 #找出zoo和zoo1的交集,都有的元素 sunion zoo zoo1 #找出zoo和zoo1的並集,所有的不重複的元素
4.雜湊資料結構
hashes即雜湊。雜湊是從redis-2.0.0版本之後才有的資料結構。
hashes存的是字串和字串值之間的對映,比如一個使用者要儲存其全名、姓氏、年齡等等,就很適合使用雜湊。
- hset 設定雜湊值
- hget 獲取雜湊值
- hmset 設定多對雜湊值
- hmget 獲取多對雜湊值
- hsetnx 如果雜湊已經存在,則不設定(防止覆蓋key)
- hkeys 返回所有keys
- hvals 返回所有values
- hlen 返回雜湊包含域(field)的數量
- hdel 刪除雜湊指定的域(field)
- hexists 判斷是否存在
redis hash是一個string型別的field和value的對映表 語法 hset key field value hset news:1 title "first news title" #設定第一條新聞 news的id為1,新增資料title的值是"first news title" hset news:1 content "news content" #新增一個conntent內容 hget news:1 title #獲取news:1的標題 hget news:1 content #獲取news的內容 hmget news:1 title content #獲取多對news:1的 值 hmset news:2 title "second news title" content "second Contents2" #設定第二條新聞news:2 多個field hmget news:2 title content #獲取news:2的多個值 hkeys news:1 #獲取新聞news:1的所有key hvals news:1 #獲取新聞news:1的所有值 hlen news:1 #獲取新聞news:1的長度 hdel news:1 title #刪除新聞news:1的title hlen news:1 #看下新聞news:1的長度 hexists news:1 title #判斷新聞1中是否有title,不存在返回0,存在返回1
redis安全
centos下redis安全相關
博文背景:
由於發現眾多同學,在使用雲伺服器時,安裝的redis3.0+版本都關閉了protected-mode,因而都遭遇了挖礦病毒的攻擊,使得伺服器99%的佔用率!!
因此我們在使用redis時候,最好更改預設埠,並且使用redis密碼登入。
(1)redis沒有使用者概念,redis只有密碼
(2)redis預設在工作在保護模式下。不允許遠端任何使用者登入的(protected-mode)
redis.conf設定
protected-mode yes #開啟保護模式 port 6380 #更改預設啟動埠 requirepass xxxxxx #設定redis啟動密碼,xxxx是自定義的密碼
啟動redis服務端
redis-server /opt/redis-4.0.10/redis.conf & #指定配置檔案啟動redis,且後臺啟動
使用密碼登入redis,使用6380埠
方法1,使用這個
[[email protected]_python ~ 09:48:41]#redis-cli -p 6380 127.0.0.1:6380> auth xxxx OK
方法2,此方案不安全,容易暴露密碼
[[email protected]_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx Warning: Using a password with '-a' option on the command line interface may not be safe. 127.0.0.1:6380> ping PONG
補充
檢查redis是否設定了密碼
127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"
2) "xxxxxx"
如果沒有,也可以給redis設定密碼(命令方式)
CONFIG set requirepass "xxxxxx"
因此你的redis就不容易被黑客入侵了。
redis持久化
Redis
是一種記憶體型資料庫,一旦伺服器程序退出,資料庫的資料就會丟失,為了解決這個問題,Redis
提供了兩種持久化的方案,將記憶體中的資料儲存到磁碟中,避免資料的丟失。
RDB持久化
redis
提供了RDB持久化
的功能,這個功能可以將redis
在記憶體中的的狀態儲存到硬碟中,它可以手動執行。
也可以再redis.conf
中配置,定期執行。
RDB持久化產生的RDB檔案是一個經過壓縮的二進位制檔案,這個檔案被儲存在硬碟中,redis可以通過這個檔案還原資料庫當時的狀態。
RDB(持久化) 記憶體資料儲存到磁碟 在指定的時間間隔內生成資料集的時間點快照(point-in-time snapshot) 優點:速度快,適合做備份,主從複製就是基於RDB持久化功能實現 rdb通過再redis中使用save命令觸發 rdb rdb配置引數: dir /data/6379/ dbfilename dbmp.rdb 每過900秒 有1個操作就進行持久化 save 900秒 1個修改類的操作 save 300秒 10個操作 save 60秒 10000個操作 save 900 1 save 300 10 save 60 10000
redis持久化之RDB實踐
1.啟動redis服務端,準備配置檔案
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定義持久化檔案儲存位置 dbfilename dbmp.rdb #rdb持久化檔案 bind 10.0.0.10 127.0.0.1 #redis繫結地址 requirepass redhat #redis登入密碼 save 900 1 #rdb機制 每900秒 有1個修改記錄 save 300 10 #每300秒 10個修改記錄 save 60 10000 #每60秒內 10000修改記錄
2.啟動redis服務端
3.登入redis設定一個key
redis-cli -a redhat
4.此時檢查目錄,/data/6379底下沒有dbmp.rdb檔案
5.通過save觸發持久化,將資料寫入RDB檔案
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> save OK
redis持久化之AOF
AOF(append-only log file)
記錄伺服器執行的所有變更操作命令(例如set del等),並在伺服器啟動時,通過重新執行這些命令來還原資料集
AOF 檔案中的命令全部以redis協議的格式儲存,新命令追加到檔案末尾。
優點:最大程式保證資料不丟
缺點:日誌記錄非常大
redis-client 寫入資料 > redis-server 同步命令 > AOF檔案
配置引數
AOF持久化配置,兩條引數 appendonly yes appendfsync always 總是修改類的操作 everysec 每秒做一次持久化 no 依賴於系統自帶的快取大小機制
1.準備aof配置檔案 redis.conf
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dbmp.rdb requirepass redhat save 900 1 save 300 10 save 60 10000 appendonly yes appendfsync everysec
2.啟動redis服務
redis-server /etc/redis.conf
3.檢查redis資料目錄/data/6379/是否產生了aof檔案
[[email protected] 6379]# ls appendonly.aof dbmp.rdb redis.log
4.登入redis-cli,寫入資料,實時檢查aof檔案資訊
[[email protected] 6379]# tail -f appendonly.aof
5.設定新key,檢查aof資訊,然後關閉redis,檢查資料是否持久化
redis-cli -a redhat shutdown redis-server /etc/redis.conf redis-cli -a redhat
redis 持久化方式有哪些?有什麼區別?
rdb:基於快照的持久化,速度更快,一般用作備份,主從複製也是依賴於rdb持久化功能
aof:以追加的方式記錄redis操作日誌的檔案。可以最大程度的保證redis資料安全,類似於mysql的binlog
釋出publish
訂閱subscribe
Redis 通過 PUBLISH 、 SUBSCRIBE 等命令實現了訂閱與釋出模式。
舉例1:
qq群的公告,單個釋出者,多個收聽者
釋出/訂閱 實驗
釋出訂閱的命令
PUBLISH channel msg 將資訊 message 傳送到指定的頻道 channel
SUBSCRIBE channel [channel ...] 訂閱頻道,可以同時訂閱多個頻道
UNSUBSCRIBE [channel ...] 取消訂閱指定的頻道, 如果不指定頻道,則會取消訂閱所有頻道 PSUBSCRIBE pattern [pattern ...] 訂閱一個或多個符合給定模式的頻道,每個模式以 * 作為匹配符,比如 it* 匹配所 有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類 PUNSUBSCRIBE [pattern [pattern ...]] 退訂指定的規則, 如果沒有引數則會退訂所有規則 PUBSUB subcommand [argument [argument ...]] 檢視訂閱與釋出系統狀態 注意:使用釋出訂閱模式實現的訊息佇列,當有客戶端訂閱channel後只能收到後續釋出到該頻道的訊息,之前傳送的不會快取,必須Provider和Consumer同時線上。
釋出訂閱:
視窗1,啟動兩個redis-cli視窗,均訂閱diantai 頻道(channel)
視窗2,啟動釋出者向頻道 diantai傳送訊息
[[email protected] ~]# redis-cli 127.0.0.1:6379> PUBLISH diantai 'jinyewugenglaiwojia' (integer) 2
視窗3,檢視訂閱者的訊息狀態
訂閱一個或者多個符合模式的頻道
視窗1,啟動兩個redis-cli視窗,均訂閱 wang*頻道(channel)
127.0.0.1:6379> PSUBSCRIBE wang* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "wang*" 3) (integer) 1
1) "pmessage" 2) "wang*" 3) "wangbaoqiang" 4) "jintian zhennanshou "
視窗2,啟動redis-cli視窗,均訂閱wang*頻道
127.0.0.1:6379> PSUBSCRIBE wang* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "wang*" 3) (integer) 1 1) "pmessage" 2) "wang*" 3) "wangbaoqiang" 4) "jintian zhennanshou "
視窗3,釋出者訊息
[[email protected] ~]# redis-cli 127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou " (integer) 2
博文背景:
由於發現眾多同學,在使用雲伺服器時,安裝的redis3.0+版本都關閉了protected-mode,因而都遭遇了挖礦病毒的攻擊,使得伺服器99%的佔用率!!
因此我們在使用redis時候,最好更改預設埠,並且使用redis密碼登入。
(1)redis沒有使用者概念,redis只有密碼
(2)redis預設在工作在保護模式下。不允許遠端任何使用者登入的(protected-mode)
redis.conf設定
protected-mode yes #開啟保護模式 port 6380 #更改預設啟動埠 requirepass xxxxxx #設定redis啟動密碼,xxxx是自定義的密碼
啟動redis服務端
redis-server /opt/redis-4.0.10/redis.conf & #指定配置檔案啟動redis,且後臺啟動
使用密碼登入redis,使用6380埠
方法1,使用這個
[[email protected]_python ~ 09:48:41]#redis-cli -p 6380 127.0.0.1:6380> auth xxxx OK
方法2,此方案不安全,容易暴露密碼
[[email protected]_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx Warning: Using a password with '-a' option on the command line interface may not be safe. 127.0.0.1:6380> ping PONG
補充
檢查redis是否設定了密碼
127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"
2) "xxxxxx"
如果沒有,也可以給redis設定密碼(命令方式)
CONFIG set requirepass "xxxxxx"
因此你的redis就不容易被黑客入侵了。
redis持久化
Redis
是一種記憶體型資料庫,一旦伺服器程序退出,資料庫的資料就會丟失,為了解決這個問題,Redis
提供了兩種持久化的方案,將記憶體中的資料儲存到磁碟中,避免資料的丟失。
RDB持久化
redis
提供了RDB持久化
的功能,這個功能可以將redis
在記憶體中的的狀態儲存到硬碟中,它可以手動執行。
也可以再redis.conf
中配置,定期執行。
RDB持久化產生的RDB檔案是一個經過壓縮的二進位制檔案,這個檔案被儲存在硬碟中,redis可以通過這個檔案還原資料庫當時的狀態。
RDB(持久化) 記憶體資料儲存到磁碟 在指定的時間間隔內生成資料集的時間點快照(point-in-time snapshot) 優點:速度快,適合做備份,主從複製就是基於RDB持久化功能實現 rdb通過再redis中使用save命令觸發 rdb rdb配置引數: dir /data/6379/ dbfilename dbmp.rdb 每過900秒 有1個操作就進行持久化 save 900秒 1個修改類的操作 save 300秒 10個操作 save 60秒 10000個操作 save 900 1 save 300 10 save 60 10000
redis持久化之RDB實踐
1.啟動redis服務端,準備配置檔案
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定義持久化檔案儲存位置 dbfilename dbmp.rdb #rdb持久化檔案 bind 10.0.0.10 127.0.0.1 #redis繫結地址 requirepass redhat #redis登入密碼 save 900 1 #rdb機制 每900秒 有1個修改記錄 save 300 10 #每300秒 10個修改記錄 save 60 10000 #每60秒內 10000修改記錄
2.啟動redis服務端
3.登入redis設定一個key
redis-cli -a redhat
4.此時檢查目錄,/data/6379底下沒有dbmp.rdb檔案
5.通過save觸發持久化,將資料寫入RDB檔案
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> save OK
redis持久化之AOF
AOF(append-only log file)
記錄伺服器執行的所有變更操作命令(例如set del等),並在伺服器啟動時,通過重新執行這些命令來還原資料集
AOF 檔案中的命令全部以redis協議的格式儲存,新命令追加到檔案末尾。
優點:最大程式保證資料不丟
缺點:日誌記錄非常大
redis-client 寫入資料 > redis-server 同步命令 > AOF檔案
配置引數
AOF持久化配置,兩條引數 appendonly yes appendfsync always 總是修改類的操作 everysec 每秒做一次持久化 no 依賴於系統自帶的快取大小機制
1.準備aof配置檔案 redis.conf
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dbmp.rdb requirepass redhat save 900 1 save 300 10 save 60 10000 appendonly yes appendfsync everysec
2.啟動redis服務
redis-server /etc/redis.conf
3.檢查redis資料目錄/data/6379/是否產生了aof檔案
[[email protected] 6379]# ls appendonly.aof dbmp.rdb redis.log
4.登入redis-cli,寫入資料,實時檢查aof檔案資訊
[[email protected] 6379]# tail -f appendonly.aof
5.設定新key,檢查aof資訊,然後關閉redis,檢查資料是否持久化
redis-cli -a redhat shutdown redis-server /etc/redis.conf redis-cli -a redhat
redis 持久化方式有哪些?有什麼區別?
rdb:基於快照的持久化,速度更快,一般用作備份,主從複製也是依賴於rdb持久化功能
aof:以追加的方式記錄redis操作日誌的檔案。可以最大程度的保證redis資料安全,類似於mysql的binlog
釋出publish
訂閱subscribe
Redis 通過 PUBLISH 、 SUBSCRIBE 等命令實現了訂閱與釋出模式。
舉例1:
qq群的公告,單個釋出者,多個收聽者
釋出/訂閱 實驗
釋出訂閱的命令
PUBLISH channel msg 將資訊 message 傳送到指定的頻道 channel
SUBSCRIBE channel [channel ...] 訂閱頻道,可以同時訂閱多個頻道
UNSUBSCRIBE [channel ...] 取消訂閱指定的頻道, 如果不指定頻道,則會取消訂閱所有頻道 PSUBSCRIBE pattern [pattern ...] 訂閱一個或多個符合給定模式的頻道,每個模式以 * 作為匹配符,比如 it* 匹配所 有以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類 PUNSUBSCRIBE [pattern [pattern ...]] 退訂指定的規則, 如果沒有引數則會退訂所有規則 PUBSUB subcommand [argument [argument ...]] 檢視訂閱與釋出系統狀態 注意:使用釋出訂閱模式實現的訊息佇列,當有客戶端訂閱channel後只能收到後續釋出到該頻道的訊息,之前傳送的不會快取,必須Provider和Consumer同時線上。
釋出訂閱:
視窗1,啟動兩個redis-cli視窗,均訂閱diantai 頻道(channel)
視窗2,啟動釋出者向頻道 diantai傳送訊息
[[email protected] ~]# redis-cli 127.0.0.1:6379> PUBLISH diantai 'jinyewugenglaiwojia' (integer) 2
視窗3,檢視訂閱者的訊息狀態
訂閱一個或者多個符合模式的頻道
視窗1,啟動兩個redis-cli視窗,均訂閱 wang*頻道(channel)
127.0.0.1:6379> PSUBSCRIBE wang* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "wang*" 3) (integer) 1
1) "pmessage" 2) "wang*" 3) "wangbaoqiang" 4) "jintian zhennanshou "
視窗2,啟動redis-cli視窗,均訂閱wang*頻道
127.0.0.1:6379> PSUBSCRIBE wang* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "wang*" 3) (integer) 1 1) "pmessage" 2) "wang*" 3) "wangbaoqiang" 4) "jintian zhennanshou "
視窗3,釋出者訊息
[[email protected] ~]# redis-cli 127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou " (integer) 2