이 기사는 Redis에 대한 관련 지식을 제공합니다. 주로 Redis 관리 도구와 Redis 데이터베이스 관리 방법을 소개합니다. 아래에서 살펴보겠습니다.
추천 학습: Redis 튜토리얼
이 문서는 보안 및 통신 프로토콜 등을 포함하여 Redis 관리에 대한 지식을 익히는 데 도움이 됩니다.
동시에 이와 밀접하게 관련된 타사 관리 도구도 도입될 예정입니다.
우리는 안전에 대해 어떻게 생각하나요?
예를 들어, 신뢰할 수 있는 환경은 우리에게 안정감을 가져다 주고, 낯선 환경은 알 수 없는 두려움과 외로움을 느끼게 합니다.
또 다른 예는 Xinchuang 프로젝트(ENCO 대체)의 현지화된 대체입니다. 여기서는 간단히 Guochuang 프로젝트라고 부르겠습니다. 이는 신뢰, 안전, 신뢰성, 독립성 및 통제 가능성이라는 목표를 달성하는 것을 목표로 합니다.
나는 단지 우리의 안전 의식을 향상시키기 위해 위에서 너무 많은 말을 했습니다(말도 안 되는 말을 너무 많이 해서 지쳤습니다).
Redis는 창립자가 한때 설명했듯이 단순함이 아름답습니다. 그러나 보안 수준에서는 많은 작업이 수행되지 않았습니다.
여기에 한 가지를 추가하고 싶습니다. 지난번에는 Redis 서비스를 정상적으로 종료하는 방법에 대해 이야기하지 않았습니다. 프로세스를 종료하여 제어할 수 있지만 종료하려면 다음 방법을 사용하는 것이 좋습니다.
$ /opt/redis-6.0.8/src/redis-cli shutdown
Redis의 보안 설계는 "Redis는 신뢰할 수 있는 환경에서 실행된다"는 전제를 기반으로 합니다. ". 프로덕션 환경(공식 릴리스 환경)에서 실행하는 경우 Redis 서버에 대한 외부 직접 연결은 허용되지 않으며, 신뢰할 수 있는 환경에서 실행하는 것이 보안을 보장하는 중요한 방법입니다. Redis.
Redis의 기본 구성 파일인 redis.conf에서는 로컬 네트워크 요청만 허용됩니다. 그러나 이 설정은 구성 파일의 bind
매개변수를 수정하여 변경할 수 있습니다. 기본 바인딩 설정은 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
在Redis3.2的版本中,引入了一个特殊模式:保护模式,来更好地确保Redis运行在可信环境之中。值得注意的是,保护模式在默认情况下是开启的。
参数设置:
#开启保护模式protected-mode yes#禁止保护模式protected-mode no
作用:
protected-mode no
禁止。在测试的时候,比如我在Windows下连接我的linux上的Redis服务。为了方便测试,此时临时关闭防护墙firewalld,或者采用firewall-cmd
命令加入6379默认端口以及Redis服务,关于防火墙的知识可以参考我之前的文章《firewalld与iptables防火墙工具》:
#临时关闭防火墙systemctl stop firewalld.service
注意:Redis3.2之前的版本默认会绑定所有网络接口,任何网络上的计算机(包含公网)都可连接至Redis服务器上。使用旧版的需要注意,最好修改这个参数,或者升级到新版。
Redis中提供了数据库密码功能。最开始我傻傻的以为直接就能连上,岂不是没有密码,真不安全。直到后来在工作的实践中,才发现原来这货可以是设置密码的,只是我以前并不知道而已。值得注意的是:并且在6.0版本中支持多用户权限控制功能。
在我的上一篇文章也有提到过。Redis数据库密码是通过参数requirepass
来控制的,默认的6.0.8版本是禁用掉了,需要手动开启。
#默认禁用掉了#requirepass foobared#启用密码requirepass 123456
客户端每次连接到Redis时都需要发送密码,否则Redis会拒绝执行客户端发来的命令。例如我使用Windows客户端连接:
开启了保护模式,开始提示DENIED
。利用bind
#设置skyset "sky" "hello redis"🎜
bind
매개변수는 여러 IP 주소에 바인딩될 수도 있습니다. IP 주소는 표시된 것처럼 공백으로 구분됩니다. 다음 예에서는: 🎜🎜🎜#获取skyget sky(error) NOAUTH Authentication required. #提示需要密码认证 #认证auth 123456 #再次获取skyget sky"hello redis"🎜1.2, protected -Redis3의 모드 매개변수🎜🎜 버전 2에는 Redis가 신뢰할 수 있는 환경에서 실행되도록 보장하는 특수 모드인 보호 모드가 도입되었습니다. 보호 모드는 기본적으로 켜져 있다는 점은 주목할 가치가 있습니다. 🎜🎜매개변수 설정: 🎜
aclifile /opt/person/conf.acl🎜🎜🎜🎜Function🎜 :🎜
보호 모드 없음
을 사용하여 비활성화할 수 있습니다. firewall-cmd
명령을 사용하여 6379 기본 포트와 Redis 서비스를 추가하세요. 방화벽에 대한 자세한 내용은 내 페이지를 참조하세요. 이전 기사 "firewalld 및 iptables 방화벽 도구" :🎜masterauth <master-password>🎜🎜Note🎜: Redis3.2 이전 버전은 기본적으로 모든 네트워크 인터페이스를 바인딩하며 네트워크(공용 네트워크 포함)의 모든 컴퓨터는 Redis 서버에 연결할 수 있습니다. 🎜이전 버전을 사용하시는 분들은 주의가 필요합니다. 이 매개변수를 수정하거나 새 버전으로 업그레이드하는 것이 가장 좋습니다. 🎜🎜🎜2. 데이터베이스 비밀번호🎜🎜Redis는 데이터베이스 비밀번호 기능을 제공합니다. 처음에는 어리석게도 직접 접속이 가능한 줄 알았는데, 비밀번호가 없어서 정말 위험했습니다. 나중에서야 이 기능을 사용하여 비밀번호를 설정할 수 있다는 사실을 알게 되었지만 이전에는 몰랐습니다. 주목할 만한 점은 버전 🎜6.0🎜에서 다중 사용자 권한 제어 기능을 지원한다는 것입니다. 🎜🎜2.1, Redis 비밀번호 설정🎜🎜은 이전 글에서도 언급한 적이 있습니다. Redis 데이터베이스 비밀번호는
requirepass
매개변수를 통해 제어됩니다. 기본 6.0.8 버전은 비활성화되어 있으며 수동으로 활성화해야 합니다. 🎜🎜🎜rename-command FLUSHALL redisabcdsky1r2d3is🎜클라이언트가 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"
虽然数据库设置密码很方便,但是在复杂的场景中经常需要使用更加细粒度的访问权限控制。比如:
tips:为此,Redis6.0推出了访问控制列表(ACL)功能,可以支持多用户,并且设置每个用户可以使用的命令和访问的键名规则等。可以通过配置文件设置,如下:
aclfile
指令引入,例如:aclifile /opt/person/conf.acl
在配置Redis复制的时候,如果主库设置了密码,需要在从库的配置文件中通过masterauth <master-password>
参数设置主库的密码,使从库连接主库时自动使用auth命令验证,配置如下。
masterauth <master-password>
Redis支持在配置文件中将命令重命名,例如将FLUSHALL命令重命名为一个比较复杂的名字,达到保证只有自己的应用可以使用该命令。当然,这个功能可以看做在6.0版本之前没有ACL,作为对命令安全性的一个补充。如下配置:
rename-command FLUSHALL redisabcdsky1r2d3is
如果希望直接一点,直接禁用,通过重命名为空字符
rename-command FLUSHALL ""
再次强调:安全起见,无论设置密码还是重命名命令,都应遵循保证配置文件的安全性,否则就无意义了。
之前有了解到Redis的主从复制以及持久化AOF文件的格式,通过了解Redis通信协议能更好的理解Redis。
当然Redis支持两种通信协议。如下:
简单协议适合在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
错误回复(error reply)以 - 开头并在后面跟着错误信息:
-ERR unknown command ``, with args beginning with:
状态回复(status reply)以+开头
+OK
整数回复(integer reply)以:开头
:3
字符串(bulk reply)回复以$开头
$3
统一请求协议是从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进行通信,使用简单协议即可。
看到redis-cli大家肯定不陌生,是的我们学习测试快速融入都是使用的redis-cli命令进行的,Redis自带的客户端。Redis可以执行大部分的Redis命令,包括查看数据库信息的info
命令、更改数据库设置的config
命令和强制进行RDB快照的save
命令。简单介绍几个管理Redis常用的命令。
当一条命令执行时间超过限制时,Redis会将该命令的执行时间等信息加入耗时命令日志(slow log)以供开发者查看。通过配置文件的slowlog-log-slower-than 10000
参数设置限制,注意单位是微秒,可以看到默认为10000。通过slowlog-max-len 128
限制记录的条数。
获取当前耗时命令日志
slowlog get
每条日志由以下4个部分组成
测试时,将slowlog-log-slower-than 0 参数设置为0
slowlog-log-slower-than 0
Redis提供了monitor来监控Redis执行的所有命令,redis-cli也支持。例如:
monitor
注意:一般用于调试和纠错使用。
获取地址:https://getmedis.com/
当Redis中的键比较多时,此时使用redis-cli管理略显不足。Medis是一款macOS下的可视化Redis管理工具。通过界面即可实现管理Redis。
看到phpRedisAdmin,大家也许会联想到以网页形式管理MySQL的phpMyAdmin管理工具。
下载地址:https://github.com/erikdubbelboer/phpRedisAdmin
关于工具的使用,可以参考github说明,这里不做过多介绍。
建议:github那访问速度大家都懂的,建议导入到gitee作为镜像仓库使用,每隔一段时间同步。
一款采用Python语言开发的Redis的快照文件解析器,它可以根据快照文件导出json数据文件、分析Redis中每个键的占用空间情况。
下载地址:https://github.com/sripathikrishnan/redis-rdb-tools
关于工具的使用,可以参考github说明,这里不做过多介绍。
最后介绍一个Redis命令大全参考网站,源自于Redis官网,链接如下:
https://redis.io/commands
推荐学习:Redis学习教程
위 내용은 30분 동안 Redis 관리 방법을 알려드립니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!