1. 程式人生 > >Linux 安裝redis 基本配置 釋出訂閱,安全配置,持久化 rdb ,aof centos下redis安全相關

Linux 安裝redis 基本配置 釋出訂閱,安全配置,持久化 rdb ,aof centos下redis安全相關

redis 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