三十分鐘帶你掌握Redis應(yīng)如何管理

本篇文章給大家?guī)?lái)了關(guān)于redis的相關(guān)知識(shí),其中主要介紹了redis管理工具的相關(guān)問(wèn)題,應(yīng)該怎樣去管理redis數(shù)據(jù)庫(kù),下面就來(lái)看一下,希望對(duì)大家有幫助。

三十分鐘帶你掌握Redis應(yīng)如何管理

推薦學(xué)習(xí):redis

三十分鐘帶你掌握Redis應(yīng)如何管理

本文將帶你熟悉Redis管理方面的知識(shí),包含安全和通信協(xié)議等等內(nèi)容。
與此同時(shí),還會(huì)介與之緊密相關(guān)的第三方管理工具。

一、安全

談到安全,我們會(huì)聯(lián)想到些什么?
比如,可信任的環(huán)境會(huì)給我們帶來(lái)安全感,陌生的環(huán)境則會(huì)讓你感到未知的恐懼和孤獨(dú)。
再比如,國(guó)產(chǎn)化替代信創(chuàng)項(xiàng)目(安可替代),這里我簡(jiǎn)稱為國(guó)創(chuàng)項(xiàng)目,就是要達(dá)到信任、安全可靠以及自主可控的的目的。

上面談了這么多(瞎扯了很多,我黔驢盡窮了),只是為了提升我們的安全意識(shí)。

Redis以簡(jiǎn)潔為美,創(chuàng)始人曾這么描述過(guò)。但同樣在安全層面也沒(méi)做過(guò)多的工作。

這里補(bǔ)充一點(diǎn),上次沒(méi)有講到如何優(yōu)雅的關(guān)閉Redis服務(wù)。雖然可以殺掉進(jìn)程來(lái)控制,但推薦使用如下方式關(guān)閉:

$ /opt/redis-6.0.8/src/redis-cli shutdown

1、可信環(huán)境

Redis的安全設(shè)計(jì)是基于“Redis運(yùn)行在可信任的環(huán)境”這個(gè)前提下做出來(lái)的。在生產(chǎn)環(huán)境(正式發(fā)布環(huán)境)運(yùn)行時(shí),不允許外部直接連接到Redis服務(wù)器上,此時(shí)應(yīng)該通過(guò)應(yīng)用程序進(jìn)行中轉(zhuǎn),運(yùn)行在可信任的環(huán)境中是保證Redis安全至關(guān)重要的方法。

1.1、bind參數(shù)

在Redis的默認(rèn)配置文件redis.conf中,只會(huì)接受本地的網(wǎng)絡(luò)請(qǐng)求。但通過(guò)在配置文件中修改bind參數(shù)更改這一設(shè)置,默認(rèn)的bind設(shè)置為:

三十分鐘帶你掌握Redis應(yīng)如何管理

bind:127.0.0.1

bind參數(shù)同樣可以綁定多個(gè)IP地址,IP地址以間隔空格分隔,如下示例:

三十分鐘帶你掌握Redis應(yīng)如何管理

# Examples:# bind 192.168.1.100 10.0.0.1# bind 127.0.0.1 ::1

1.2、protected-mode參數(shù)

在Redis3.2的版本中,引入了一個(gè)特殊模式:保護(hù)模式,來(lái)更好地確保Redis運(yùn)行在可信環(huán)境之中。值得注意的是,保護(hù)模式在默認(rèn)情況下是開啟的。

參數(shù)設(shè)置:

#開啟保護(hù)模式protected-mode yes#禁止保護(hù)模式protected-mode no

三十分鐘帶你掌握Redis應(yīng)如何管理

作用

  • 開啟保護(hù)模式:接收到來(lái)自不在bind綁定的網(wǎng)絡(luò)客戶端發(fā)送命令時(shí),如果客戶端沒(méi)有設(shè)置密碼,Redis會(huì)返回錯(cuò)誤拒絕(DENIED)執(zhí)行該命令。
  • 禁止保護(hù)模式:可以在配置中使用protected-mode no禁止。
  • 安全:對(duì)于生產(chǎn)環(huán)境需要確保開啟了護(hù)盾(防火墻),達(dá)到確保可信客戶端連接服務(wù)器的目的。

在測(cè)試的時(shí)候,比如我在Windows下連接我的linux上的Redis服務(wù)。為了方便測(cè)試,此時(shí)臨時(shí)關(guān)閉防護(hù)墻firewalld,或者采用firewall-cmd命令加入6379默認(rèn)端口以及Redis服務(wù),關(guān)于防火墻的知識(shí)可以參考我之前的文章《firewalld與iptables防火墻工具》:

#臨時(shí)關(guān)閉防火墻systemctl stop firewalld.service

注意:Redis3.2之前的版本默認(rèn)會(huì)綁定所有網(wǎng)絡(luò)接口,任何網(wǎng)絡(luò)上的計(jì)算機(jī)(包含公網(wǎng))都可連接至Redis服務(wù)器上。使用舊版的需要注意,最好修改這個(gè)參數(shù),或者升級(jí)到新版。

2、數(shù)據(jù)庫(kù)密碼

Redis中提供了數(shù)據(jù)庫(kù)密碼功能。最開始我傻傻的以為直接就能連上,豈不是沒(méi)有密碼,真不安全。直到后來(lái)在工作的實(shí)踐中,才發(fā)現(xiàn)原來(lái)這貨可以是設(shè)置密碼的,只是我以前并不知道而已。值得注意的是:并且在6.0版本中支持多用戶權(quán)限控制功能

2.1、Redis密碼設(shè)置

在我的上一篇文章也有提到過(guò)。Redis數(shù)據(jù)庫(kù)密碼是通過(guò)參數(shù)requirepass來(lái)控制的,默認(rèn)的6.0.8版本是禁用掉了,需要手動(dòng)開啟。

三十分鐘帶你掌握Redis應(yīng)如何管理

#默認(rèn)禁用掉了#requirepass foobared#啟用密碼requirepass 123456

客戶端每次連接到Redis時(shí)都需要發(fā)送密碼,否則Redis會(huì)拒絕執(zhí)行客戶端發(fā)來(lái)的命令。例如我使用Windows客戶端連接:
開啟了保護(hù)模式,開始提示DENIED。利用bind綁定了信任的ip或者禁止保護(hù)模式,最后還會(huì)提示密碼為驗(yàn)證。

三十分鐘帶你掌握Redis應(yīng)如何管理

示例:設(shè)置鍵sky,set “sky” “hello redis”

#設(shè)置skyset "sky" "hello redis"

重啟redis服務(wù)(需要讀取到redis.conf文件),會(huì)提示驗(yàn)證密碼,如下圖所示。

三十分鐘帶你掌握Redis應(yīng)如何管理

#獲取skyget sky(error) NOAUTH Authentication required.  #提示需要密碼認(rèn)證 #認(rèn)證auth 123456 #再次獲取skyget sky"hello redis"

雖然數(shù)據(jù)庫(kù)設(shè)置密碼很方便,但是在復(fù)雜的場(chǎng)景中經(jīng)常需要使用更加細(xì)粒度的訪問(wèn)權(quán)限控制。比如:

  • 生產(chǎn)環(huán)境中的應(yīng)用程序下不應(yīng)該具有執(zhí)行CONFIG、FLUSHALL涉及到管理或者數(shù)據(jù)安全的命令權(quán)限
  • 多個(gè)程序因不同用途共用一個(gè)Redis服務(wù)時(shí),建議限制某個(gè)程序訪問(wèn)其它程序產(chǎn)生的鍵。

tips:為此,Redis6.0推出了訪問(wèn)控制列表(ACL)功能,可以支持多用戶,并且設(shè)置每個(gè)用戶可以使用的命令和訪問(wèn)的鍵名規(guī)則等。可以通過(guò)配置文件設(shè)置,如下:

  • 將ACL配置直接寫在Redis配置文件中
  • 將ACL配置寫在單獨(dú)的文件中,然后在Redis配置文件通過(guò)aclfile指令引入,例如:
aclifile /opt/person/conf.acl

2.1、Redis主從復(fù)制注意事項(xiàng)

在配置Redis復(fù)制的時(shí)候,如果主庫(kù)設(shè)置了密碼,需要在從庫(kù)的配置文件中通過(guò)masterauth <master-password>參數(shù)設(shè)置主庫(kù)的密碼,使從庫(kù)連接主庫(kù)時(shí)自動(dòng)使用auth命令驗(yàn)證,配置如下。

三十分鐘帶你掌握Redis應(yīng)如何管理

masterauth <master-password>

3、命名命令

Redis支持在配置文件中將命令重命名,例如將FLUSHALL命令重命名為一個(gè)比較復(fù)雜的名字,達(dá)到保證只有自己的應(yīng)用可以使用該命令。當(dāng)然,這個(gè)功能可以看做在6.0版本之前沒(méi)有ACL,作為對(duì)命令安全性的一個(gè)補(bǔ)充。如下配置:

rename-command FLUSHALL redisabcdsky1r2d3is

如果希望直接一點(diǎn),直接禁用,通過(guò)重命名為空字符

rename-command FLUSHALL ""

再次強(qiáng)調(diào):安全起見,無(wú)論設(shè)置密碼還是重命名命令,都應(yīng)遵循保證配置文件的安全性,否則就無(wú)意義了。

二、通信協(xié)議

之前有了解到Redis的主從復(fù)制以及持久化AOF文件的格式,通過(guò)了解Redis通信協(xié)議能更好的理解Redis。

當(dāng)然Redis支持兩種通信協(xié)議。如下:

  • 一種是二進(jìn)制安全的統(tǒng)一請(qǐng)求協(xié)議(unified request protocol)
  • 第二種是比較直觀的便于在telnet程序中輸入的簡(jiǎn)單協(xié)議

1、簡(jiǎn)單協(xié)議

簡(jiǎn)單協(xié)議適合在telnet程序中和Redis通信。如下是通過(guò)telnet測(cè)試與Redis通信:

linux下Redhat系列安裝telnet通過(guò)yum命令

yum -y install telnet

Windows在啟用或關(guān)閉Windows功能中啟用telnet

[root@dywangk redis-6.0.8]# telnet 127.0.0.1 6379Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.auth 123456 #同樣需要驗(yàn)證密碼,之前設(shè)置了密碼+OKset foo bar  +OK get foo$3bar#輸入quit退出telnet

1.1、錯(cuò)誤回復(fù)

錯(cuò)誤回復(fù)(error reply)以 – 開頭并在后面跟著錯(cuò)誤信息:

-ERR unknown command ``, with args beginning with:

1.2、狀態(tài)回復(fù)

狀態(tài)回復(fù)(status reply)以+開頭

+OK

1.3、整數(shù)回復(fù)

整數(shù)回復(fù)(integer reply)以:開頭

:3

1.4、字符串回復(fù)

字符串(bulk reply)回復(fù)以$開頭

$3

2、統(tǒng)一請(qǐng)求協(xié)議

統(tǒng)一請(qǐng)求協(xié)議是從Redis1.2開始加入的,其命令格式與多行字符串回復(fù)格式類似。也以telnet為例演示:

[root@dywangk redis-6.0.8]# telnet 127.0.0.1 6379Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'.auth 123456 #同樣需要驗(yàn)證密碼,之前設(shè)置了密碼+OK *3$3set$3foo$3bar   +OK#輸入quit退出telnet

同樣,在發(fā)送命令的時(shí)候指定了后面字符串的長(zhǎng)度,所以每個(gè)命令的每個(gè)參數(shù)都可以包含二進(jìn)制的字符。

Redis的AOF文件和主從復(fù)制時(shí)數(shù)據(jù)庫(kù)發(fā)送的內(nèi)容使用了統(tǒng)一請(qǐng)求協(xié)議。如果簡(jiǎn)單的使用telnet與Redis進(jìn)行通信,使用簡(jiǎn)單協(xié)議即可。

三、管理工具

1、redis-cli

看到redis-cli大家肯定不陌生,是的我們學(xué)習(xí)測(cè)試快速融入都是使用的redis-cli命令進(jìn)行的,Redis自帶的客戶端。Redis可以執(zhí)行大部分的Redis命令,包括查看數(shù)據(jù)庫(kù)信息的info命令、更改數(shù)據(jù)庫(kù)設(shè)置的config命令和強(qiáng)制進(jìn)行RDB快照的save命令。簡(jiǎn)單介紹幾個(gè)管理Redis常用的命令。

1.1、耗時(shí)命令日志

當(dāng)一條命令執(zhí)行時(shí)間超過(guò)限制時(shí),Redis會(huì)將該命令的執(zhí)行時(shí)間等信息加入耗時(shí)命令日志(slow log)以供開發(fā)者查看。通過(guò)配置文件的slowlog-log-slower-than 10000參數(shù)設(shè)置限制,注意單位是微秒,可以看到默認(rèn)為10000。通過(guò)slowlog-max-len 128限制記錄的條數(shù)。

獲取當(dāng)前耗時(shí)命令日志

slowlog get

每條日志由以下4個(gè)部分組成

  • 唯一日志ID
  • 執(zhí)行的Unix時(shí)間
  • 耗時(shí)時(shí)間,單位為微秒
  • 命令及其參數(shù)

測(cè)試時(shí),將slowlog-log-slower-than 0 參數(shù)設(shè)置為0

slowlog-log-slower-than 0

1.2、命令監(jiān)控

Redis提供了monitor來(lái)監(jiān)控Redis執(zhí)行的所有命令,redis-cli也支持。例如:

monitor

注意:一般用于調(diào)試和糾錯(cuò)使用。

2、Medis

獲取地址:https://getmedis.com/

三十分鐘帶你掌握Redis應(yīng)如何管理

當(dāng)Redis中的鍵比較多時(shí),此時(shí)使用redis-cli管理略顯不足。Medis是一款macOS下的可視化Redis管理工具。通過(guò)界面即可實(shí)現(xiàn)管理Redis。

3、phpRedisAdmin

看到phpRedisAdmin,大家也許會(huì)聯(lián)想到以網(wǎng)頁(yè)形式管理MySQL的phpMyAdmin管理工具。

下載地址:https://github.com/erikdubbelboer/phpRedisAdmin

關(guān)于工具的使用,可以參考github說(shuō)明,這里不做過(guò)多介紹。

建議:github那訪問(wèn)速度大家都懂的,建議導(dǎo)入到gitee作為鏡像倉(cāng)庫(kù)使用,每隔一段時(shí)間同步。

4、Rdbtools

一款采用Python語(yǔ)言開發(fā)的Redis的快照文件解析器,它可以根據(jù)快照文件導(dǎo)出json數(shù)據(jù)文件、分析Redis中每個(gè)鍵的占用空間情況。

下載地址:https://github.com/sripathikrishnan/redis-rdb-tools

關(guān)于工具的使用,可以參考github說(shuō)明,這里不做過(guò)多介紹。

5、命令參考

最后介紹一個(gè)Redis命令大全參考網(wǎng)站,源自于Redis官網(wǎng),鏈接如下:

https://redis.io/commands

推薦學(xué)習(xí):redis

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊5 分享