Redis连接命令,Redis安全策略,Redis客户端(client)命令,Redis服务器命令
目录
Redis连接命令详解
Redis连接命令
连接命令应用
Redis安全策略
命令配置密码
手动配置密码
指令安全
端口安全
SSH代理
Redis客户端(client)命令
Redis IO多路复用
客户端最大连接数
常用命令
命令应用应用
Redis服务器命令
常用服务器命令
基本命令演示
Redis连接命令详解
Redis 连接命令是主要用于验证 Redis 服务器的连接状态,比如验证客户端与 Redis 服务器是否连接成功,以及检查服务器运行状态,以及是否断开当前连接等。
我们知道,只有当客户端与服务器正常连接后才能够实现彼此的交互、通信。Redis 通过“Redis序列化协议”(简称“RESP”),实现客户端与服务端之间的连接通信,该协议主要包括两个部分:网络模型和序列化协议。
- 网络模型主要负责数据交互的组织方式;
- 序列化协议则实现了数据的序列化;
由此可知,客户端与服务端交互的数据是以序列后的协议数据进行传输的。
下面是一个简单的请求/响应
示意图,如下所示:
图1:Redis客户端与服务器交互
Redis连接命令
命令 | 说明 |
---|---|
AUTH password | 验证密码是否正确 |
ECHO message | 打印字符串 |
PING | 查看服务是否运行正常 |
QUIT | 关闭当前连接 |
SELECT index | 切换到指定的数据库 |
连接命令应用
1) 建立连接
在确认 Redis 已经成功配置之后,(可参考《Windows下载安装 Redis》)开启一个客户端与服务器的连接,执行以下命令:
C:\Users\Administrator>redis-cli 127.0.0.1:6379>
2) 验证连接
下面看一组实例演示:
#通过配置文件或者或者config命令配置客户端连接密码 redis 127.0.0.1:6379> CONFIG SET requirepass 123456 OK #验证给定的密码和配置文件密码是否一致 redis 127.0.0.1:6379> AUTH 123456 OK #检测客户端与服务器是否连接正常 redis 127.0.0.1:6379> PING PONG #切换到2库 127.0.0.1:6379> SELECT 2 OK 127.0.0.1:6379[2]> ECHO "hello www.biancheng.net" "hello www.biancheng.net" #中断连接 127.0.0.1:6379> QUITC:\Users\Administrator>
上述示例,通过AUTH
命令验证密码,从而证明了客户端已经连接到了 Redis 服务,然后我们使用 PING 命令来检测服务器运行是否正常。
在线练习工具:Try Redis
查看更多 Redis 命令:Command reference – Redis
Redis安全策略
Redis 提供了诸多安全策略,比如为了保证数据安全,提供了设置密码的功能。Redis 密码设置主要有两种方式:一种是使用CINFIG
命令来设置密码;另外一种则是手动修改 Redis 的配置文件。虽然看似前者更为简单,其实两种方式各有特点。本节将对它们进行介绍。
命令配置密码
通过执行以下命令查看是否设置了密码验证:
通过执行以下命令查看是否设置了密码验证:
127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) ""
在默认情况下 requirepass 参数值为空的,表示无需通过密码验证就可以连接到 Redis 服务。
下面执行以下命令设置密码。如下所示:
127.0.0.1:6379> CONFIG set requirepass "www.biancheng.net" OK 127.0.0.1:6379> CONFIG get requirepass 1) "requirepass" 2) "www.biancheng.net"
执行完上述操作后,客户端要连接到 Redis 服务就需要密码验证,如果不验证就无法操作 Redis 数据库。如下所示:
127.0.0.1:6379> set key name www.biancheng.net #报错无法操作 (error) NOAUTH Authentication required.
使用AUTH
命令验证密码:
127.0.0.1:6379> AUTH www.biancheng.net OK #执行命令成功 127.0.0.1:6379> SET name www.biancheng.net OK 127.0.0.1:6379> GET name www.biancheng.net
注意:通过命令行设置的密码并非永久有效,当您重启服务后密码就会失效,所以一般不采用这种方式。下面介绍一种永久有效的修改方式,也就是手动配置密码。
手动配置密码
手动修改配置密码也非常的简单,首先,您要在 Redis 的安装目录中找到 redis.windows.conf 配置文件,然后打开该文件,并使用 Ctrl+F 搜索 requirepass 关键字,找到配置项并配置密码,如下所示:
# requirepass foobared requirepass www.biancheng.net //配置自己的密码
然后使用更改后的配置文件重启服务器,依次执行以下命令:
#首先停止服务: C:\Users\Administrator>redis-server.exe --service-stop #重启服务器 C:\Users\Administrator>redis-server.exe --service-start #重新登陆 C:\Users\Administrator>redis-cli.exe -h 127.0.0.1 -p 6379 -a www.biancheng.net Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. #命令执行成功 127.0.0.1:6379>config get requirepass 1)"requirepass" 2)"www.biancheng.net"
手动配置无须验证密码,只需要重新启动 Redis 服务器。这种配置方式,密码永远有效。如果想取消密码设置,您需要将配置文件更改回原来的状态,然后再次重启服务器,即可取消。
除了需要为 Redis 配置密码外,我们在使用 Redis 时也需要注意一些常见的安全风险以及防范措施,从而避免数据泄露和丢失,以及人为操作失误等。
指令安全
Redis 有一些非常危险的命令,这些命令会对 Redis 的稳定以及数据安全造成非常严重的影响。比如 keys 指令会导致 Redis 卡顿,而 flushdb 和 flushall 会让 Redis 的所有数据全部清空。那么如何避免这些操作失误带来的灾难性后果呢?
Redis 在配置文件中提供了 rename-command 指令用于将某些危险的指令修改成特别的名称,用来避免人为误操作。比如在配置文件的 security 模块增加以下内容:
rename-command keys 123keys123
如果您还想执行 keys 命令,那就需要在命令行输入123keys123。 当然也可以将指令 rename 成空字符串,这样就无法通过字符串来执行 keys 命令了。
rename-command flushall ""
端口安全
Redis 默认监听*:6379
,如果当前的服务器主机有外网地址,那么 Redis 的服务将会直接暴露在公网上,别有用心的人使用适当的探测工具就可以对 IP 地址进行端口扫描,从而威胁您的系统安全。
如果 Redis 的服务地址一旦可以被外网直接访问,其内部数据就彻底丧失了安全性。黑客们可以通过 Redis 执行 Lua 脚本拿到服务器权限,然后清空您的 Redis 数据库。因此务必在 Redis 的配置文件中绑定要监听的 IP 地址,避免类似的情况发生。如下所示:
bind 193.168.1.1 #绑定外网ip地址
不仅如此,还可以增加 Redis 的密码访问限制,客户端必须使用 auth 命令传入正确的密码才可以访问 Redis。
requirepass yourspassword
这样即使地址暴露出去了,普通黑客也无法对 Redis 服务器进行任何指令操作。
密码配置也会影响到主从复制。要求从机必须配置与主服务相同的密码才可以进行主从复制。
masterauth yourspassword
SSH代理
Redis 不支持 SSL 链接,这意味着客户端和服务器交互的数据不应该在公网上传输,否则会有被窃听的风险。如果必须要在公网上,可以考虑使用 SSL 代理。SSL 代理比较常见的有 ssh。Redis 官方也推荐了一种代理工具,也就是 spiped (点击了解)。 其功能虽然单一,但使用起来比较简单,易于理解。
Redis客户端(client)命令
Redis 提供了一些操作客户端(client)的命令,比如查询所有已连接到服务器的客户端数量,控制客户端的连接状态(关闭或者挂起)等。通过客户命令我们可以轻松的实现对客户端的管理、控制。
Redis 服务器通过监听 TCP 端口的方式来接受客户端的连接。当一个连接建立后,Redis 会自动执行以下过程:
- 首先客户端 socket 被设置为非阻塞模式,这是因为 Redis 在网络事件处理上采用了非阻塞式 IO(即 IO 多路复用模型);
- 其次设置 socket 的 TCP_NODELAY 属性,从而禁用 Nagle 算法;
- 最后创建一个可读的文件事件,用它来监听客户端 socket 的数据发送。
Redis 使用命令的格式向客户端输入数据,这个数据量是非常小的。当向客户端输入命令后,我们希望能快速的得到服务器的应答,也就是低延时性,但如果开启了Nagle
算法就会出现频繁延时的现象,导致用户体验极差。
TCP_NODELAY 控制是否开启 Nagle 算法,该算法可以提高广域网传输效率,减少分组的报文个数,适合传输体量较大的数据。
Redis IO多路复用
Redis 的底层是一个单线程模型,单线程指的是使用一个线程来处理所有的网络事件请求,这样就避免了多进程或者多线程切换导致的 CPU 消耗,而且也不用考虑各种锁的问题。
Redis 为了充分利用单线程,加快服务器的处理速度,它采用 IO 多路复用模型来处理客户端与服务端的连接,这种模型有三种实现方式,分别是 select、poll、epoll。Redis 正是采用 epoll 的方式来监控多个 IO 事件。当客户端空闲时,线程处于阻塞状态;当一个或多个 IO 事件触发时(客户端发起网路连接请求),线程就会从阻塞状态唤醒,并同时使用epoll
来轮询触发事件,并依次提交给线程处理。
注意:“多路”指的是多个网络连接,“复用”指的是复用同一个线程。多路 IO 复用技术可以让单个线程高效的处理多个连接请求。
客户端最大连接数
在 Redis 配置文件中,有一个maxclients
的配置项,它指定了连接到 Redis 服务器的最大客户端数量。其默认值是 10000。配置项如下所示:
127.0.0.1:6379> config get maxclients 1) "maxclients" 2) "10000" #更改最大连接数量 127.0.0.1:6379> config set maxclients 20000 OK 127.0.0.1:6379> config get maxclients 1) "maxclients" 2) "20000"
常用命令
命令 | 说明 |
---|---|
CLIENT LIST | 以列表的形式返回所有连接到 Redis 服务器的客户端。 |
CLIENT SETNAME | 设置当前连接的名称。 |
CLIENT GETNAME | 获取通过 CLIENT SETNAME 命令设置的服务名称。 |
CLIENT PAUSE | 挂起客户端连接,将所有客户端挂起指定的时间(以毫秒为计算)。 |
CLIENT KILL | 关闭客户端连接。 |
CLIENT ID | 返回当前客户端 ID。 |
CLIENT REPLY | 控制发送到当前连接的回复,可选值包括 on|off|skip。 |
命令应用应用
下面看一组简单的使用示例,如下所示:
127.0.0.1:6379> CLIENT ID (integer) 2557 127.0.0.1:6379> CLIENT LIST id=2556 addr=127.0.0.1:64684 fd=30 name= age=2422 idle=339 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client id=2557 addr=127.0.0.1:49502 fd=43 name= age=537 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client 127.0.0.1:6379> CLIENT REPLY ON OK 127.0.0.1:6379> CLIENT SETNAME "www.biancheng.net" OK 127.0.0.1:6379> CLIENT GETNAME "www.biancheng.net" 127.0.0.1:6379> CLIENT KILL 127.0.0.1:49502 OK
Redis服务器命令
Redis 服务器是对客户端提供服务的主体,只要是安装了 Redis 数据库的计算机都可以通过本地,或者远程的方式对外提供服务。
Redis 服务器能够以高可用集群的方式对外提供服务。所谓高可用集群,指的是多台 Redis 服务器组成的服务器架构,每台服务器都提供相同的服务,从而让服务器达到一个稳定,高效的运行状态。有关 Redis 集群的相关知识在后续内容中详介绍。
从 3.0 版本开始,Redis 已经实现了对 Redis-cluster 集群部署的支持。
Redis 提供了诸多操作服务器的命令,这些命令都有着各自重要的作用,比如BGSAVE
命令,用异步的方式将 Redis 数据库的数据同步到本地磁盘中,实现数据的持久化存储,这对服务器的数据安全有着重要的作用。
常用服务器命令
下表介绍了 Redis 服务器的常用命令:
命令 | 说明 |
---|---|
BGREWRITEAOF |
在后台以异步的方式执行一个 AOF 文件的重写操作,对源文件进行压缩,使其体积变小。 AOF 是实现数据持久化存储的方式之一。 |
BGSAVE | 在后台执行初始化操作,并以异步的方式将当前数据库的数据保存到磁盘中。 |
CLIENT KILL [ip:port] [ID client-id] | 关闭客户端连接。 |
CLIENT LIST | 获取连接到服务器的客户端连接列表。 |
CLIENT GETNAME | 获取当前连接客户端的名称。 |
CLIENT PAUSE timeout | 使服务器在指定的时间停止执行来自客户端的命令。 |
CLIENT SETNAME connection-name | 设置当前连接客户端的名称。 |
COMMAND | 返回所有 Redis 命令的详细描述信息。 |
COMMAND COUNT | 此命令用于获取 Redis 命令的总数。 |
COMMAND GETKEYS | 获取指定命令的所有键。 |
INFO [section] | 获取 Redis 服务器的各种信息和统计数值。 |
COMMAND INFO command-name [command-name ...] | 用于获取指定 Redis 命令的描述信息。 |
CONFIG GET parameter | 获取指定配置参数的值。 |
CONFIG REWRITE | 修改启动 Redis 服务器时所指定的 redis.conf 配置文件。 |
CONFIG SET parameter value | 修改 Redis 配置参数,无需重启。 |
CONFIG RESETSTAT | 重置 INFO 命令中的某些统计数据。 |
DBSIZE | 返回当前数据库中 key 的数量。 |
DEBUG OBJECT key | 获取 key 的调试信息。当 key 存在时,返回有关信息;当 key 不存在时,返回一个错误。 |
DEBUG SEGFAULT | 使用此命令可以让服务器崩溃。 |
FLUSHALL | 清空数据库中的所有键。 |
FLUSHDB | 清空当前数据库的所有 key。 |
LASTSAVE | 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 格式表示。 |
MONITOR | 实时打印出 Redis 服务器接收到的命令。 |
ROLE | 查看主从实例所属的角色,角色包括三种,分别是 master、slave、sentinel。 |
SAVE |
执行数据同步操作,将 Redis 数据库中的所有数据以 RDB 文件的形式保存到磁盘中。 RDB 是 Redis 中的一种数据持久化方式。 |
SHUTDOWN [NOSAVE] [SAVE] | 将数据同步到磁盘后,然后关闭服务器。 |
SLAVEOF host port |
此命令用于设置主从服务器,使当前服务器转变成为指定服务器的从属服务器, 或者将其提升为主服务器(执行 SLAVEOF NO ONE 命令)。 |
SLOWLOG subcommand [argument] | 用来记录查询执行时间的日志系统。 |
SYNC | 用于同步主从服务器。 |
SWAPDB index index | 用于交换同一 Redis 服务器上的两个数据库,可以实现访问其中一个数据库的客户端连接,也可以立即访问另外一个数据库的数据。 |
TIME | 此命令用于返回当前服务器时间。 |
注意:上述一些命令在后续内容还会做相应介绍,比如 Redis 主从服务器设置,以及 Redis 数据持久化等。
基本命令演示
下面是对上述的命令做简单的演示,您可以跟着敲一遍命令,从加深对命令的理解与记忆:
#查看redis命令的描述信息 127.0.0.1:6379> COMMAND INFO SET GET ZADD 1) 1) "set"2) (integer) -33) 1) write2) denyoom4) (integer) 15) (integer) 16) (integer) 1 2) 1) "get"2) (integer) 23) 1) readonly2) fast4) (integer) 15) (integer) 16) (integer) 1 3) 1) "zadd"2) (integer) -43) 1) write2) denyoom3) fast4) (integer) 15) (integer) 16) (integer) 1 #最近一次执行数据持久化存储的时间 127.0.0.1:6379> LASTSAVE (integer) 1610717455 127.0.0.1:6379> LASTSAVE (integer) 1610717455 #实时打印redis服务器接收的命令 127.0.0.1:6379> MONITOR OK 1610951376.523762 [0 127.0.0.1:60257] "COMMAND" ^C #查看前两条日志信息 127.0.0.1:6379> SLOWLOG get 2 1) 1) (integer) 132) (integer) 16109502583) (integer) 464994) 1) "info"5) "127.0.0.1:58561"6) "" 2) 1) (integer) 122) (integer) 16109502013) (integer) 199174) 1) "COMMAND"5) "127.0.0.1:58561"6) "" #共有多少条日志记录 127.0.0.1:6379> SLOWLOG len (integer) 14 #清空所有日志记录 127.0.0.1:6379> SLOWLOG reset OK 127.0.0.1:6379> SLOWLOG len (integer) 0 #用于同步主从服务器数据 127.0.0.1:6379> SYNC Entering replica output mode... (press Ctrl-C to quit) SYNC with master, discarding 1719 bytes of bulk transfer... SYNC done. Logging commands from master. "PING" "PING" "PING" "PING" "PING" ^C C:\Users\Administrator>redis-cli #查看当前服务器时间 #第一个字符串是当前时间以 UNIX 时间戳格式表示 #第二个字符串表示:当前这一秒钟已经逝去的微秒数 127.0.0.1:6379> TIME 1) "1610953086" 2) "17499"
在线练习工具:Try Redis
查看更多 Redis 命令:Command reference – Redis
Redis连接命令,Redis安全策略,Redis客户端(client)命令,Redis服务器命令相关推荐
- 11.什么是Redis连接池?如何使用Redis连接池? 嘻哈的简写笔记——Redis
1.什么是Redis连接池? Redis 和MySQL一样都有连接池,使用连接池可以***避免频繁的创建和销毁链接对象而消耗资源***: 2.如何使用Redis连接池? 创建连接池配置对象: 创建连接 ...
- 【TD】td | TDengine | 时序数据库 | 客户端client | taos使用 | 常用命令 | td备份
一.说明 1.服务器已安装好TDengine服务 2.client是Windows系统 3.介绍使用taos命令操作TD 二.操作 1.下载windows客户端 1)下载 https://docs.t ...
- 服务器如何识别同一客户端的各种不同的命令_开源项目|如何开发一个高性能的redis cluster proxy?...
背景 redis cluster简介 Redis cluster是redis官方提供集群方案,设计上采用非中心化的架构,节点之间通过gossip协议交换互相的状态,redis cluster使用数据分 ...
- Redis 连接命令介绍
Redis 连接命令主要是用于连接 redis 服务. redis连接命令介绍 AUTH password 说明:AUTH命令用来检测给定的密码和配置文件中的密码是否相同 返回:如果密码匹配则返回OK ...
- redis连接相关命令
redis日常连接命令是用客户端时候用的比较多的命令,下面来介绍一下reids连接相关的命令. 命令 1.auth命令-验证密码是否正确. redis中auth命令用于检测给定的密码和配置文件中的密码 ...
- 走近源码:Redis命令执行过程(客户端)
前面我们了解过了当Redis执行一个命令时,服务端做了哪些事情,不了解的同学可以看一下这篇文章走近源码:Redis如何执行命令.今天就一起来看看Redis的命令执行过程中客户端都做了什么事情. 启动客 ...
- Day770.Redis客户端如何与服务器端交换命令和数据 -Redis 核心技术与实战
Redis客户端如何与服务器端交换命令和数据 Hi,我是阿昌,今天学习记录的是关于Redis客户端如何与服务器端交换命令和数据的内容. Redis 采用的是典型的 client-server(服务器端 ...
- redis 命令 释放连接_redis scan命令导致redis连接耗尽,线程上锁的解决
使用redis scan方法无法获取connection,导致线程锁死. 0.关键字 redis springboot redistemplate scan try-with-resource 1.异 ...
- Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案
Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案 参考文章: (1)Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案 ( ...
最新文章
- Icomparer和Icomparable集合排序
- C++中如何定义动态数组
- 收集MySQL常用函数,值得收藏!
- C++基础01-C++对c的增强
- 基于FFmpeg的视频播放器之九:使用SDL2播放音频
- Windows 中包括的 USB 设备类驱动程序
- Wireshark 用户使用手册 ———— 自定义 Wireshark
- ASP.NET MVC+Bootstrap 实现短信验证
- Android Scroller的使用
- Win7怎么共享无线 Win7无线网络共享全攻略
- 最黑链的如何写隐藏代码
- 湖北大学计算机学院胡院长,胡书山-湖北大学计算机与信息工程学院
- 《阿凡达》的元宇宙帝国多久抵达现实?
- 【线性代数】矩阵的初等变换
- 基于 Wio Terminal 实现的网络天气预报助理
- 时间序列分析 | SVM支持向量机时间序列预测(Matlab完整程序)
- 分子模拟 第一章 绪论(南开孙老师课程笔记)
- typedef define
- k8s的Pods里面ImagePullBackOff的网络问题
- ( 转载)改变人类历史的17大数学方程