Skip to content

启动、配置、交互、关闭

更新: 2025/2/24 字数: 0 字 时长: 0 分钟

启动

Redis有三种启动方式:直接启动、选项启动、文件启动。

直接启动

在命令行输入下面命令来直接启动Redis:

redis-server

QQ截图20200517020951

可以看到启动Redis后,会打印出一些日志信息:

1.当前的Redis版本的是3.2.100
2.Redis的默认端口是6379
3.进程ID是33644

!> 注意:在启动Redis的界面中有一行警告提示:没有读取配置文件,使用的默认配置。而且这种启动方式是不会在生产环境中使用的。

**通过在 redis-server 后面加上配置选项和值(可以有多对),使Redis启动时使用该选项配置。**例如,用6380作为端口启动Redis,那么可以执行:

redis-server --port 6380

QQ截图20200517022132

?> 提示:虽然运行配置可以自定义配置,但是如果需要修改的配置较多或者希望将配置保存到文件中,不建议使用这种方式。

配置启动

使用配置文件来启动Redis是最保险和主流的方式,假如一台机器上启动多个Redis,通过配置文件启动的方式提供了更大的灵活性,所以大部分生产环境会使用这种方式启动Redis。Redis的配置文件在Linux系统下名称是 redis.conf,在Windows系统下配置文件名称是 redis.windows.conf

QQ截图20200517023357

现在我们将配置文件路径加在后面启动Redis,就会发现警告提示消失了:

redis-server 路径\redis.windows.conf

20190119140700561

启动错误

启动Redis时,可能会发生如下错误,其原因就是:Redis服务已经启动了。

QQ截图20220210112032

解决办法:输入如下命令即可再次启动成功。

1. redis-cli.exe
2. shutdown
3. exit
4. redis-server.exe

配置

Redis有60多个配置,这里只给出一些重要的配置:

QQ截图20200517022440

!> 注意:Reids必须要通过配置文件来启动,所定义的配置才会生效。

设置密码

打开 redis.windows.conf 修改文件中内容,# requirepass foobared 去掉前面的注释符 # 并将内容修改为 requirepass 密码

QQ截图20200526221845

QQ截图20200526224943

连接Reids,因为是本地就使用默认端口和地址,但密码参数 -a 需要加上:

redis-cli -a 密码

如果直接使用 redis-cli 命令也能连上只不过查询不了里面的数据,因为没有身份认证,使用 auth 密码 命令,通过身份认证后,便可以查询数据了:

QQ截图20200917230443

通过验证后,还可以使用 config get requirepass 命令查询密码:

QQ截图20220720113922

后台运行

Windows不支持daemonize即后台运行:

QQ截图20211024215035

在Linux运行起了 redis-server 后就没有办法在这个窗口下做任何操作了,因为使用Ctrl+C就直接退出了:

20160805094245027

Linux支持daemonize即后台运行,这时我们可以修改redis的配置文件,将daemonize后面的no改为yes(即后台运行或者叫守护进程方式运行):

QQ截图20211024215125

再通过配置方式启动Redis即可后台运行:提醒一下,redis-serverredis.conf 的路径都要用绝对路径。

QQ截图20220210113649

开放访问

打开 redis.windows.conf 修改文件中内容,bind 127.0.0.1 前面加上一个注释,允许其他IP能连接Redis。

QQ截图20200917224556

其他配置

在配置文件中还有一些其他的配置,需要了解知道的如下:

# 通用配置
protected-mode yes  # 保护模式(默认开启)
supervised no  # 通过守护进程去管理(默认no)
pidfile /var/run/redis_6379.pid  # 以后台方式运行,需要指定一个pid文件!
loglevel notice  # 日志等级
databases 16  # 默认16个数据库

# 快照配置
save 900 1  # 900秒内,至少有一个key修改就进行持久化操作
save 300 10  # 300秒内,至少有十个key修改就进行持久化操作
save 60 10000  # 60秒内,至少有一万个key修改就进行持久化操作
stop-writes-on-bgsave-error yes  # 持久化出错,是否继续工作
rdbcompression yes  # 是否压缩rdb文件
rdbchecksum yes  # 保存rdb文件时,进行错误检查校验
dir /var/lib/redis  # rdb文件保存目录

# 限制配置
maxclients 10000  # 最大连接数
maxmemory <bytes>  # redis配置的最大内存容量
maxmemory-policy noeviction  # 内存达到上限后的处理策略

# AOF模式配置
appendonly no  # 默认不开启AOF模式,默认是使用RDB持久化
appendfilename "appendonly.aof"  # 持久化文件的名字
appendfsync always  # 每次修改都会同步,消耗性能
appendfsync everysec  # 每秒执行一次同步,可能会丢失这1s的数据
appendfsync no  # 不执行同步,这个时候操作系统自己同步数据,速度最快!

交互

Redis开头可执行文件,称之为Redis Shell,这些可执行文件可以做很多事情,例如:启动和停止Redis、检测和修复Redis的持久化文件,还可以检测Redis的性能。

QQ截图20200517020627

连接服务

**前面我们已经启动了Redis服务,要确保Redis服务的窗口一直处于运行状态(不关闭状态),否则后面的操作将无效。**接下来再启动一个命令行,使用 redis-cli 命令连接Redis服务器:

redis-cli -h 127.0.0.1 -p 6379 -a password
  • -h参数:主机地址,默认连接127.0.0.1;

  • -p参数:Redis端口,默认6379;

  • -a参数:如果Redis配置了密码,就要用这个选项进行密码登录;

QQ截图20200517025015

?> 提示:如果 -h-p-a 都没写就是连接 127.0.0.1:6379 这个没有密码的Redis实例。

通信测试

PING命令:用于测试客户端与服务器的连接是否能正常通信或者用于测量延迟值。

127.0.0.1:6379> ping
PONG
注释:客户端向Redis服务器发送一个PING,如果服务器运作正常的话,会返回PONG ,否则返回一个连接错误。

redis-cli参数

redis-cli还有其他的一些参数:

  • -r(repeat)选项代表将命令执行多次,例如下面操作将会执行三次ping命令

    redis-cli -r 3 ping
    PONG
    PONG
    PONG
  • -i(interval)选项代表每隔几秒执行一次命令,但是-i选项必须和-r选项一起使用,下面的操作会每隔1秒执行一次ping命令,一共执行5次:

    redis-cli -r 5 -i 1 ping
    PONG
    PONG
    PONG
    PONG
    PONG
  • --rdb选项会请求Redis实例生成并发送RDB持久化文件,保存在本地。可使用它做持久化文件的定期备份。

  • --bigkeys选项使用scan命令对Redis的键进行采样,从中找到内存占用比较大的键值,这些键可能是系统的瓶颈。

  • --no-raw选项返回原始格式的结果,--raw选项返回格式化后的结果。

redis-cli set hello "你好"
OK

redis-cli get hello
"\xe4\xbd\xa0\xe5\xa5\xbd"

redis-cli --no-raw get hello
"\xe4\xbd\xa0\xe5\xa5\xbd"

redis-cli --raw get hello
你好

客户端管理

连接信息

client list 命令:列出与Redis服务端相连的所有客户端连接信息,结果的每一行代表一个客户端的信息,每行包含了十几个属性,它们是每个客户端的一些执行状态。

127.0.0.1:6379> client list 
id=2232080 addr=10.16.xx.55:32886 fd=946 name= age=603382 idle=331060 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get
...
  • id:客户端连接的唯一标识,这个id是随着Redis的连接自增的,重启Redis后会重置为0。

  • addr:客户端连接的ip和端口。

  • fd:socket的文件描述符,与 lsof 命令结果中的fd是同一个,如果 fd=-1 代表当前客户端不是外部客户端,而是Redis内部的伪装客户端。

  • name:客户端的名字,后面的 client setNameclient getName 两个命令会对其进行说明。

  • age:当前客户端已经连接的时间。

  • idle:当前客户端最近一次的空闲时间。

当前客户端连接Redis的时间为603382秒,其中最近一次空闲了331060秒。

最大连接数

Redis提供了 maxclients 参数来限制最大客户端连接数,一旦连接数超过 maxclients,新的连接将被拒绝。maxclients 默认值是10000,可以通过info clients来查询当前Redis的连接数

127.0.0.1:6379> info clients
# Clients
connected_clients:1414
...

通过 config set maxclients 对最大客户端连接数进行动态设置:

127.0.0.1:6379> config get maxclients 
1) "maxclients" 
2) "10000" 
127.0.0.1:6379> config set maxclients 50 
OK
127.0.0.1:6379> config get maxclients 
1) "maxclients" 
2) "50"

最大空闲时间

为了防止存在大量idle(空闲)连接,Redis提供了 timeout(单位为秒)参数来限制连接的最大空闲时间,一旦客户端连接的idle时间超过了 timeout,连接将会被关闭。

#Redis默认的timeout是0,也就是不会检测客户端的空闲 
127.0.0.1:6379> config set timeout 30 
OK

?> 提示:在实际开发和运维中,需要将timeout设置成大于0,例如可以设置为300秒。

关闭

**客户端通过 shutdown 命令来停止Redis服务器提供服务。**方式如下:

# 直接停止Redis服务
redis-cli shutdown

# 停止有密码保护的redis
redis-cli -a 密码 shutdown

# 停止Redis服务前,生成持久化文件
redis-cli shutdown nosave|save

?> 提示:除了通过 shutdown 命令关闭Redis服务以外,还可以通过 kill 进程号 的方式关闭掉Redis。

!> 注意:不要粗暴地使用 kill -9 强制杀死Redis服务,不但不会做持久化操作,还会造成缓冲区等资源不能被优雅关闭,极端情况会造成AOF和复制丢失数据的情况。

停止Redis服务后,当使用redis-cli再次连接该Redis服务时,看到Redis已经“失联”。

C:\Users\ChenZhuo>redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused