目录

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 服务器的常用命令:

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服务器命令相关推荐

  1. 11.什么是Redis连接池?如何使用Redis连接池? 嘻哈的简写笔记——Redis

    1.什么是Redis连接池? Redis 和MySQL一样都有连接池,使用连接池可以***避免频繁的创建和销毁链接对象而消耗资源***: 2.如何使用Redis连接池? 创建连接池配置对象: 创建连接 ...

  2. 【TD】td | TDengine | 时序数据库 | 客户端client | taos使用 | 常用命令 | td备份

    一.说明 1.服务器已安装好TDengine服务 2.client是Windows系统 3.介绍使用taos命令操作TD 二.操作 1.下载windows客户端 1)下载 https://docs.t ...

  3. 服务器如何识别同一客户端的各种不同的命令_开源项目|如何开发一个高性能的redis cluster proxy?...

    背景 redis cluster简介 Redis cluster是redis官方提供集群方案,设计上采用非中心化的架构,节点之间通过gossip协议交换互相的状态,redis cluster使用数据分 ...

  4. Redis 连接命令介绍

    Redis 连接命令主要是用于连接 redis 服务. redis连接命令介绍 AUTH password 说明:AUTH命令用来检测给定的密码和配置文件中的密码是否相同 返回:如果密码匹配则返回OK ...

  5. redis连接相关命令

    redis日常连接命令是用客户端时候用的比较多的命令,下面来介绍一下reids连接相关的命令. 命令 1.auth命令-验证密码是否正确. redis中auth命令用于检测给定的密码和配置文件中的密码 ...

  6. 走近源码:Redis命令执行过程(客户端)

    前面我们了解过了当Redis执行一个命令时,服务端做了哪些事情,不了解的同学可以看一下这篇文章走近源码:Redis如何执行命令.今天就一起来看看Redis的命令执行过程中客户端都做了什么事情. 启动客 ...

  7. Day770.Redis客户端如何与服务器端交换命令和数据 -Redis 核心技术与实战

    Redis客户端如何与服务器端交换命令和数据 Hi,我是阿昌,今天学习记录的是关于Redis客户端如何与服务器端交换命令和数据的内容. Redis 采用的是典型的 client-server(服务器端 ...

  8. redis 命令 释放连接_redis scan命令导致redis连接耗尽,线程上锁的解决

    使用redis scan方法无法获取connection,导致线程锁死. 0.关键字 redis springboot redistemplate scan try-with-resource 1.异 ...

  9. Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案

    Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案 参考文章: (1)Redis连接的客户端(connected_clients)数过高或者不减的问题解决方案 ( ...

最新文章

  1. Icomparer和Icomparable集合排序
  2. C++中如何定义动态数组
  3. 收集MySQL常用函数,值得收藏!
  4. C++基础01-C++对c的增强
  5. 基于FFmpeg的视频播放器之九:使用SDL2播放音频
  6. Windows 中包括的 USB 设备类驱动程序
  7. Wireshark 用户使用手册 ———— 自定义 Wireshark
  8. ASP.NET MVC+Bootstrap 实现短信验证
  9. Android Scroller的使用
  10. Win7怎么共享无线 Win7无线网络共享全攻略
  11. 最黑链的如何写隐藏代码
  12. 湖北大学计算机学院胡院长,胡书山-湖北大学计算机与信息工程学院
  13. 《阿凡达》的元宇宙帝国多久抵达现实?
  14. 【线性代数】矩阵的初等变换
  15. 基于 Wio Terminal 实现的网络天气预报助理
  16. 时间序列分析 | SVM支持向量机时间序列预测(Matlab完整程序)
  17. 分子模拟 第一章 绪论(南开孙老师课程笔记)
  18. typedef define
  19. k8s的Pods里面ImagePullBackOff的网络问题
  20. ( 转载)改变人类历史的17大数学方程

热门文章

  1. 《录鼎记》——重启之回溯part05
  2. ios删除邮件+服务器,iOS 10:如何删除所有邮件? | MOS86
  3. Netty的AttributeMap属性
  4. 湖畔大学终结?刚刚,官方回应更名!
  5. 搜索引擎之ElasticSearch(es)入门学习、ELK 和 beats
  6. greenplum的几个内存配置
  7. 你也可以是春天的风景,百丽教你早春清新穿搭
  8. 消息推送和即时通讯项目简单实现
  9. android批量删除联系人代码,Android手机怎么批量删除联系人?
  10. 电脑耳机只有伴奏人声很小怎么办 插入耳机只有音乐