三十分鐘帶你掌握Redis該如何管理
這篇文章為大家帶來了關於Redis的相關知識,其中主要介紹了Redis管理工具的相關問題,應該怎樣去管理Redis資料庫,下面就來看一下,希望對大家有幫助。
推薦學習:Redis教學
本文將帶你熟悉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 +OK 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
获取地址:https://getmedis.com/
当Redis中的键比较多时,此时使用redis-cli管理略显不足。Medis是一款macOS下的可视化Redis管理工具。通过界面即可实现管理Redis。
3、phpRedisAdmin
看到phpRedisAdmin,大家也许会联想到以网页形式管理MySQL的phpMyAdmin管理工具。
下载地址:https://github.com/erikdubbelboer/phpRedisAdmin
关于工具的使用,可以参考github说明,这里不做过多介绍。
建议:github那访问速度大家都懂的,建议导入到gitee作为镜像仓库使用,每隔一段时间同步。
4、Rdbtools
一款采用Python语言开发的Redis的快照文件解析器,它可以根据快照文件导出json数据文件、分析Redis中每个键的占用空间情况。
下载地址:https://github.com/sripathikrishnan/redis-rdb-tools
关于工具的使用,可以参考github说明,这里不做过多介绍。
5、命令参考
最后介绍一个Redis命令大全参考网站,源自于Redis官网,链接如下:
https://redis.io/commands
推荐学习:Redis学习教程
以上是三十分鐘帶你掌握Redis該如何管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。
