久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis應怎么管理

129次閱讀
沒有評論

共計 4454 個字符,預計需要花費 12 分鐘才能閱讀完成。

這篇文章主要介紹“Redis 應怎么管理”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Redis 應怎么管理”文章能幫助大家解決問題。

一、安全

談到安全,我們會聯想到些什么?
比如,可信任的環境會給我們帶來安全感,陌生的環境則會讓你感到未知的恐懼和孤獨。
再比如,國產化替代信創項目(安可替代),這里我簡稱為國創項目,就是要達到信任、安全可靠以及自主可控的的目的。

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

Redis 以簡潔為美,創始人曾這么描述過。但同樣在安全層面也沒做過多的工作。

這里補充一點,上次沒有講到如何優雅的關閉 Redis 服務。雖然可以殺掉進程來控制,但推薦使用如下方式關閉:

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

1、可信環境

Redis 的安全設計是基于“Redis 運行在可信任的環境”這個前提下做出來的。在生產環境(正式發布環境)運行時,不允許外部直接連接到 Redis 服務器上,此時應該通過應用程序進行中轉,運行在可信任的環境中是保證 Redis 安全至關重要的方法。

1.1、bind 參數

在 Redis 的默認配置文件 redis.conf 中,只會接受本地的網絡請求。但通過在配置文件中修改 bind 參數更改這一設置,默認的 bind 設置為:

bind:127.0.0.1

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

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

1.2、protected-mode 參數

在 Redis3.2 的版本中,引入了一個特殊模式:保護模式,來更好地確保 Redis 運行在可信環境之中。值得注意的是,保護模式在默認情況下是開啟的。

參數設置:

#開啟保護模式 protected-mode yes# 禁止保護模式 protected-mode no

作用:

開啟保護模式:接收到來自不在 bind 綁定的網絡客戶端發送命令時,如果客戶端沒有設置密碼,Redis 會返回錯誤拒絕(DENIED)執行該命令。

禁止保護模式:可以在配置中使用 protected-mode no 禁止。

安全:對于生產環境需要確保開啟了護盾(防火墻),達到確保可信客戶端連接服務器的目的。

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

# 臨時關閉防火墻 systemctl stop firewalld.service

注意:Redis3.2 之前的版本默認會綁定所有網絡接口,任何網絡上的計算機(包含公網)都可連接至 Redis 服務器上。使用舊版的需要注意,最好修改這個參數,或者升級到新版。

2、數據庫密碼

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

2.1、Redis 密碼設置

在我的上一篇文章也有提到過。Redis 數據庫密碼是通過參數 requirepass 來控制的,默認的 6.0.8 版本是禁用掉了,需要手動開啟。

# 默認禁用掉了 #requirepass foobared# 啟用密碼 requirepass 123456

客戶端每次連接到 Redis 時都需要發送密碼,否則 Redis 會拒絕執行客戶端發來的命令。例如我使用 Windows 客戶端連接:
開啟了保護模式,開始提示 DENIED。利用 bind 綁定了信任的 ip 或者禁止保護模式,最后還會提示密碼為驗證。

示例:設置鍵 sky,set“sky”“hello redis”

# 設置 skyset  sky   hello redis

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

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

雖然數據庫設置密碼很方便,但是在復雜的場景中經常需要使用更加細粒度的訪問權限控制。比如:

生產環境中的應用程序下不應該具有執行 CONFIG、FLUSHALL 涉及到管理或者數據安全的命令權限

多個程序因不同用途共用一個 Redis 服務時,建議限制某個程序訪問其它程序產生的鍵。

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

將 ACL 配置直接寫在 Redis 配置文件中

將 ACL 配置寫在單獨的文件中,然后在 Redis 配置文件通過 aclfile 指令引入,例如:

aclifile /opt/person/conf.acl

2.1、Redis 主從復制注意事項

在配置 Redis 復制的時候,如果主庫設置了密碼,需要在從庫的配置文件中通過 masterauth master-password 參數設置主庫的密碼,使從庫連接主庫時自動使用 auth 命令驗證,配置如下。

masterauth  master-password

3、命名命令

Redis 支持在配置文件中將命令重命名,例如將 FLUSHALL 命令重命名為一個比較復雜的名字,達到保證只有自己的應用可以使用該命令。當然,這個功能可以看做在 6.0 版本之前沒有 ACL,作為對命令安全性的一個補充。如下配置:

rename-command FLUSHALL redisabcdsky1r2d3is

如果希望直接一點,直接禁用,通過重命名為空字符

rename-command FLUSHALL 

再次強調:安全起見,無論設置密碼還是重命名命令,都應遵循保證配置文件的安全性,否則就無意義了。

二、通信協議

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

當然 Redis 支持兩種通信協議。如下:

一種是二進制安全的統一請求協議(unified request protocol)

第二種是比較直觀的便于在 telnet 程序中輸入的簡單協議

1、簡單協議

簡單協議適合在 telnet 程序中和 Redis 通信。如下是通過 telnet 測試與 Redis 通信:

linux 下 Redhat 系列安裝 telnet 通過 yum 命令:

yum -y install telnet

Windows 在啟用或關閉 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 # 同樣需要驗證密碼, 之前設置了密碼+OKset foo bar 
get foo$3bar# 輸入 quit 退出 telnet

1.1、錯誤回復

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

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

1.2、狀態回復

狀態回復(status reply)以 + 開頭

+OK

1.3、整數回復

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

:3

1.4、字符串回復

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

$3

2、統一請求協議

統一請求協議是從 Redis1.2 開始加入的,其命令格式與多行字符串回復格式類似。也以 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 # 同樣需要驗證密碼, 之前設置了密碼+OK
*3$3set$3foo$3bar 
+OK# 輸入 quit 退出 telnet

同樣,在發送命令的時候指定了后面字符串的長度,所以每個命令的每個參數都可以包含二進制的字符。

Redis 的 AOF 文件和主從復制時數據庫發送的內容使用了統一請求協議。如果簡單的使用 telnet 與 Redis 進行通信,使用簡單協議即可。

三、管理工具 1、redis-cli

看到 redis-cli 大家肯定不陌生,是的我們學習測試快速融入都是使用的 redis-cli 命令進行的,Redis 自帶的客戶端。Redis 可以執行大部分的 Redis 命令,包括查看數據庫信息的 info 命令、更改數據庫設置的 config 命令和強制進行 RDB 快照的 save 命令。簡單介紹幾個管理 Redis 常用的命令。

1.1、耗時命令日志

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

獲取當前耗時命令日志

slowlog get

每條日志由以下 4 個部分組成

唯一日志 ID

執行的 Unix 時間

耗時時間,單位為微秒

命令及其參數

測試時,將 slowlog-log-slower-than 0 參數設置為 0

slowlog-log-slower-than 0

1.2、命令監控

Redis 提供了 monitor 來監控 Redis 執行的所有命令,redis-cli 也支持。例如:

monitor

注意:一般用于調試和糾錯使用。

2、Medis

當 Redis 中的鍵比較多時,此時使用 redis-cli 管理略顯不足。Medis 是一款 macOS 下的可視化 Redis 管理工具。通過界面即可實現管理 Redis。

3、phpRedisAdmin

看到 phpRedisAdmin,大家也許會聯想到以網頁形式管理 MySQL 的 phpMyAdmin 管理工具。

關于工具的使用,可以參考 github 說明,這里不做過多介紹。

建議:github 那訪問速度大家都懂的,建議導入到 gitee 作為鏡像倉庫使用,每隔一段時間同步。

4、Rdbtools

一款采用 Python 語言開發的 Redis 的快照文件解析器,它可以根據快照文件導出 json 數據文件、分析 Redis 中每個鍵的占用空間情況。

關于“Redis 應怎么管理”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-15發表,共計4454字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 昆明市| 永顺县| 汉沽区| 河北区| 太和县| 嵩明县| 东乌珠穆沁旗| 柞水县| 阳春市| 清丰县| 兰州市| 永州市| 华安县| 潢川县| 蓝山县| 宁国市| 杭锦旗| 怀宁县| 延寿县| 紫阳县| 泸西县| 灵武市| 江阴市| 桂东县| 泾阳县| 子洲县| 泽库县| 永安市| 龙胜| 蓬安县| 九龙县| 福清市| 县级市| 西安市| 长岛县| 海淀区| 炎陵县| 宣威市| 英超| 东至县| 偃师市|