1. 程式人生 > >06Redis入門指南筆記(安全、通訊協議、管理工具)

06Redis入門指南筆記(安全、通訊協議、管理工具)

一:安全

1:可信的環境

        Redis以簡潔為美。在安全層面Redis也沒有做太多的工作。Redis的安全設計是在“Redis執行在可信環境”這個前提下做出的。在生產環境執行時不能允許外界直接連線到 Redis 伺服器上,而應該通過應用程式進行中轉,執行在可信的環境中是保證Redis安全的最重要方法。

Redis的預設配置會接受來自任何地址傳送來的請求,要更改這一設定,可以修改配置檔案中的bind引數,如只允許若干IP連線Redis,可如下修改:

bind 192.168.1.100 10.0.0.1
bind 127.0.0.1

如果想更自由地設定訪問規則需要通過防火牆來完成。

2:資料庫密碼

可以通過配置檔案中的requirepass引數為Redis設定一個密碼。例如:

requirepass TAFK(@~!ji^XALQ(sYh5xIwTn5D$s7JF 

客戶端每次連線到 Redis 時都需要傳送密碼,否則Redis 會拒絕執行客戶端發來的命令。傳送密碼需要使用auth命令,例如:

not connected> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth TAFK(@~!ji^XALQ(sYh5xIwTn5D$s7JF
OK
127.0.0.1:6379> ping
PONG

認證之後就可以執行任何命令了。由於Redis的效能極高,並且輸入錯誤密碼後Redis並不會進行主動延遲(考慮到Redis的單執行緒模型),所以攻擊者可以通過窮舉法破解Redis的密碼,因此在設定時一定要選擇複雜的密碼。

3:命名命令

Redis 支援在配置檔案中將命令重新命名,比如將 flushall 命令重新命名成一個比較複雜的名字,以保證只有自己的應用可以使用該命令。就像這樣:

rename-command FLUSHALL oyfekmjvmwxq5a9c8usofuo369x0it2k

這種情況下,如果執行flushall命令,則會報錯:

127.0.0.1:6379> flushall
(error) ERR unknown command 'flushall'

如果希望直接禁用某個命令,可以將命令重新命名成空字串:

rename-command FLUSHALL ””

注意,無論設定密碼還是重新命名命令,都需要保證配置檔案的安全性,否則就沒有任何意義了。

二:通訊協議

Redis通訊協議是Redis客戶端與 Redis之間交流的語言,通訊協議規定了命令和返回值的格式。瞭解Redis通訊協議後不僅可以理解AOF檔案的格式和主從複製時主資料庫向從資料庫傳送的內容等,還可以開發自己的 Redis 客戶端(不過由於幾乎所有常用的語言都有相應的Redis客戶端,需要使用通訊協議直接和Redis打交道的機會不多)。

Redis支援兩種通訊協議,一種是二進位制安全的統一請求協議(unified  request  protocol),另一種是比較直觀的,便於在 telnet程式中輸入的簡單協議。這兩種協議只是命令的格式有區別,命令返回值的格式是一樣的。

1:簡單協議

簡單協議適合在telnet程式中和Redis 通訊。簡單協議的命令格式就是將命令和各個引數使用空格分隔開,如”exists  foo”、”set  foo  bar”等。

由於 Redis 解析簡單協議時只是簡單地以空格分隔引數,所以無法輸入二進位制字元。比如:

[email protected]:~# telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to 127.1.
Escape character is '^]'.
set foo bar
+OK
get foo
$3
bar
lpush plist 1 2 3
:3
lrange plist 0 -1
*3
$1
3
$1
2
$1
1
errcommand
-ERR unknown command 'errcommand'

在telnet程式中輸入的5條命令恰好展示了Redis的5種返回值型別的格式,之前介紹過這5種返回值型別在redis-cli 中的展現形式,這些展現形式是經過redis-cli封裝的,而上面的內容才是 Redis真正返回的格式:

a:錯誤回覆,以”-“開頭,在後面跟上錯誤資訊,最後以”\r\n”結尾:

-ERR unknown command 'errcommand'

b:狀態回覆,以”+”開頭,在後面跟上狀態資訊,最後以”\r\n”結尾:

+OK

c:整數回覆,以”:”開頭,在後面跟上數字,最後以”\r\n”結尾:

:3

d:字串回覆,以”$”開頭,並在後面跟上字串的長度和”\r\n”,接著是字串的內容和”\r\n” :

$3
bar

如果返回值是空結果nil,則會返回 “$-1”以和空字串相區別。

e:多行字串回覆,以”*”開頭,後面跟上字串回覆的組數和”\r\n”,接著後面跟的就是字串回覆的具體內容了:

*3
$1
3
$1
2
$1
1

2:統一請求協議

統一請求協議,其命令格式和上面多行字串回覆的格式很類似,比如要傳送命令”set foobar  hello”時,只需要按照上面介紹的格式傳送即可。例子如下:

[email protected]:~# telnet 127.0.0.1 6379
Trying 127.0.0.1...
Connected to 127.1.
Escape character is '^]'.
*3
$3
set
$6
foobar
$5
hello
+OK

get foobar
$5
hello

*2
$3
get
$6
foobar
$5
hello

傳送命令時指定了後面字串的長度,所以命令的每個引數都可以包含二進位制的字元。統一請求協議的返回值格式和簡單協議一樣,這裡不再贅述。

Redis的AOF檔案和主從複製時主資料庫向從資料庫傳送的內容都使用了統一請求協議。如果要開發一個和Redis直接通訊的客戶端,推薦使用此協議。如果只是想通過telnet向Redis伺服器傳送命令則使用簡單協議就可以了。

三:管理工具

1:redis-cli

作為 Redis 自帶的命令列客戶端,可以從任何安裝有Redis的伺服器中找到它,所以對於管理Redis而言,redis-cli是最簡單實用的工具。

redis-cli可以執行大部分的Redis命令,下面介紹幾個管理Redis時非常有用的命令:

a:慢查詢日誌功能

當一條命令執行時間超過限制時,Redis會將該命令的執行時間等資訊加入慢查詢日誌(slow  log)以供開發者檢視。關於慢查詢的配置選項有:

slowlog-log-slower-than 10000
slowlog-max-len 128

“slowlog-log-slower-than”引數指明記錄慢查詢的時間設定,單位是微秒(1000000微秒相當於1秒),負數表明將禁用慢查詢日誌功能,0表明將記錄每個命令。注意這裡的時間僅指命令執行時間,不包括IO時間(比如與客戶端通訊的事件)。

慢查詢日誌儲存在記憶體中,可以通過“slowlog-max-len”引數來限制記錄的條數。超過時,新命令將替換最早的命令。

使用”slowlog  get”命令可獲得當前的慢查詢日誌,為了驗證該命令,將配置檔案的“slowlog-log-slower-than”置為0。然後執行命令”set  foo bar”和”get  foo”,如:

127.0.0.1:6379> slowlog get
1) 1) (integer) 2
   2) (integer) 1449296176
   3) (integer) 15
   4) 1) "get"
      2) "foo"
2) 1) (integer) 1
   2) (integer) 1449296173
   3) (integer) 14
   4) 1) "set"
      2) "foo"
      3) "bar"

每條日誌都由以下4個部分組成:

該日誌唯一ID;

該命令執行的Unix時間;

該命令的耗時時間,單位是微秒;

命令及其引數

b:命令監控功能

Redis提供了monitor命令來監控 Redis執行的所有命令,redis-cli支援這個命令,如在終端A的redis-cli中執行“monitor”,這時 Redis 執行的任何命令都會在終端A的redis-cli 中打印出來,如開啟終端B的 redis-cli,執行”SET  foo  bar”命令,此時終端A的redis-cli中會輸出如下內容:

127.0.0.1:6379> monitor
OK
1449296535.901203 [0 127.0.0.1:55287] "set" "foo" "bar"

注意,monitor命令非常影響Redis的效能,一個客戶端使用monitor命令會降低Redis將近一半的負載能力。所以 monitor命令只適合用來除錯和糾錯。

2:phpRedisAdmin

當Redis 中的鍵較多時,使用redis-cli管理資料並不是很方便,就如同管理 MySQL時有人喜歡使用phpMyAdmin一樣,Redis同樣有一個PHP開發的網頁端管理工具phpRedisAdmin。

phpRedisAdmin支援以樹形結構檢視鍵列表,編輯鍵值,匯入/匯出資料庫資料,檢視資料庫資訊和檢視鍵資訊等功能。

3:Rdbtools

Rdbtools 是一個Redis 快照檔案解析器。快照檔案是二進位制格式,不利於檢視,可以使用Rdbtools來將其匯出為JSON格式,分析 Redis 中每個鍵的佔用空間情況等。Rdbtools 使用 Python 開發。

相關推薦

06Redis入門指南筆記(安全通訊協議管理工具)

一:安全 1:可信的環境         Redis以簡潔為美。在安全層面Redis也沒有做太多的工作。Redis的安全設計是在“Redis執行在可信環境”這個前提下做出的。在生產環境執行時不能允許外

07Redis入門指南筆記(主從複製哨兵)

        現實專案中通常需要若干臺Redis伺服器的支援: 結構上,單個 Redis 伺服器會發生單點故障,而且一臺伺服器需要承受所有的請求負載。這就需要為資料生成多個副本並分配在不同的伺服器

Redis入門指南-筆記-進階

back 進階 返回 單位 告訴 watch 是把 場景 如果 4.1 事務 (1) 事務是一組命令的集合 (2) 事務同命令一樣是Redis的最小執行單位,一個事務中的命令要麽都執行,要麽都不執行。 (3) 格式:

python入門學習筆記(三)——切片元組

4.操作列表 4.1遍歷整個列表:for name = ['x','y','z'] for x in name: (in後面是可迭代物件‚不要忘記:ƒ迴圈內容要縮排,縮排是靈魂)          &

面試專題資料(資料結構與演算法通訊協議

一、通訊協議 一、三次握手簡單例子 第一次握手: A給B打電話說,你可以聽到我說話嗎? 第二次握手: B收到了A的資訊,然後對A說: 我可以聽得到你說話啊,你能聽得到我說話嗎?   第三次握手: A收到了B的資訊,然後說可以的,我要給你發信息啦! 對圖說明:

stm32f103 學習筆記 —— 07 CAN通訊協議

1.報文種類 資料幀 :用於節點向外傳送資料 遙控幀 :用於向遠端節點請求資料 錯誤幀 :用於向遠端節點通知校驗錯誤,請求重新發送上一個資料 過載幀 :用於通知遠端節點本節點尚未做好接受準備 幀間隔 :用於將資料幀及遙控幀與前面的

機器學習之python入門指南(二)元組集合字典的使用

Python3中元組、集合、字典的使用 Python中元組的用法元組的建立與訪問 元組和列表類似,不同之處在於元組不能修改,元組使用小括號,列表使用方括號,注意元組中如果只包含以個元素需要在後面加,否則會被當作運算子使用 元組與字串類似,下標索引從0開始,可以進行擷取,取捨

(學習筆記) SPI通訊協議

概念 SPI, Serial Perripheral Interface, 序列外圍裝置介面, 是 Motorola 公司推出的一種通訊介面技術。 SPI,是一種高速的,全雙工,同步序列通訊匯流排,並且在晶片的管腳上只佔用四根線(MISO,MOSI,NSS,

TCP/IP協議HTTP協議SOCKET通訊詳解

ron bsp 正式 ber 二次 軟件 寄存器 使用 網絡通信 1、TCP連接TCP(Transmission Control Protocol) 傳輸控制協議。TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握確認建立一個連接。位碼即tcp標誌位,有6種

網路程式設計常用的通訊協議Socket套接字程式設計(Socket和ServerSocket)埠號

網路程式設計:     java語言中,提供了一套統一的程式設計介面。很多細節都已經底層化。            所在,可以進行無痛的網路通訊程式設計。            提供的是Socket套接字技術。  --常用的通訊協議:    (1)TCP/IP:在通訊之前,需

Servlet第一篇【介紹ServletHTTP協議WEB目錄結構編寫入門Servlet程式Servlet生命週期】

什麼是Serlvet? Servlet其實就是一個遵循Servlet開發的java類。Serlvet是由伺服器呼叫的,執行在伺服器端。 為什麼要用到Serlvet? 我們編寫java程式想要在網上實現 聊天、發帖、這樣一些的互動功能,普通的java技術

SSD的傳輸總線傳輸協議傳輸接口

行業 對數 結構 提升 現在 型號 簡介 ahci 糾錯 前言:關於SSD,有眾多總線類型、協議類型、接口類型,每個接口還包括不同型號,在這裏花點時間全部整理一下,整理日期2017-08-08。 1.傳輸總線 總線就像一條公路,公路上的車好比總線上的電信號;公路的大小和車流

20170908工作日記--UML畫類圖HTTP協議Volley源碼走讀

width gen shtml 操作系統 android 瀏覽器中 系統 總結 http協議 隨手搜了一下,Android studio居然能夠自動幫追我們生成UML的類圖,簡直太棒了http://www.gcssloop.com/course/UsePlantUMLInA

Python全棧__服務器與多客戶端通信UDP協議pycharm打印帶顏色輸出時間同步的機制

enc bre list print bsp sock pan lis acc 1、服務器與多客戶端通信 1 import socket 2 # 創建tcp socket的套接字 3 sk = socket.socket() 4 # bind 5

Django準備知識-web應用http協議web框架Django簡介

一、web應用   Web應用程式是一種可以通過web訪問的應用程式(web應用本質是基於socket實現的應用程式),程式的最大好處是使用者很容易訪問應用程式,使用者只需要有瀏覽器即可,不需要再安裝其他軟體。應用程式有兩種模式C/S、B/S。C/S是客戶端/伺服器端程式,也就是說這類程式一般獨立執行。而B

微信通訊錄拉群微信通訊錄粉ipad協議WXID爆粉協議手機號碼資料精準吸粉平臺

大資料時代營銷法則,得微信得財富,得雲控者,得天下      這裡給大家介紹爆粉之外更加暴力的通訊錄拉群,群營銷雲控系統。 在wxid爆粉之後更加暴力出來營銷系統,在微信限制5000好友以來,更加好的儲存客戶,營銷策略那無可置疑的是我們的群營銷。  

微信通訊錄粉微信通訊錄拉群ipad協議WXID爆粉協議手機號碼資料精準吸粉平臺

大資料時代營銷法則,得微信得財富,得雲控者,得天下 這裡給大家介紹爆粉之外更加暴力的通訊錄拉群,群營銷雲控系統。 在wxid爆粉之後更加暴力出來營銷系統,在微信限制5000好友以來,更加好的儲存客戶,營銷策略那無可置疑的是我們的群營銷。 我們商家有時候手裡有

RTSP協議RTMP協議HTTP協議的區別

RTSP、 RTMP、HTTP的共同點、區別 共同點: 1:RTSP RTMP HTTP都是在應用應用層。 2: 理論上RTSP RTMPHTTP都可以做直播和點播,但一般做直播用RTSP RTMP,做點播用HTTP。做視訊會議的時候原來用SIP協議,現在

RPC協議http協議tcp/ip協議udp協議socket協議以及soap協議都有什麼相同點和不同點

HTTP與RPC的區別: 人們常常錯誤地將HTTP稱作一種遠端過程呼叫(RPC)[23]機制,僅僅是因為它包括了請求和響應。    呼叫遠端機器上的一個過程(procedure)的觀念,是RPC與其他形式的基於網路的應用通訊的區別在。 RPC的協議識別出過程並且傳遞給它固定

TCP/IP協議Http協議ftp協議

TCP/IP起源於20世紀60年代末美國政府資助的一個網路分組交換研究專案,TCP/IP是發展至今最成功的通訊協議,它被用於當今所構築的最大的開放式網路系統Internet之上。 TCP和IP是兩個獨立且緊密結合的協議,負責管理和引導資料報文在Interne