2.redis的安装和配置

142 阅读6分钟

Linux系统安装redis

2.1 redis的安装

  • 安装gcc
yum -y install gcc gcc-c++

redis 的官网为: redis.io

image.png

在opt目录下创建tools目录和apps目录(有的就不用建了)

将下载好的压缩包上传到 Linux 的/opt/tools 目录中。

解压到apps目录

tar -zxvf redis-7.0.8.tar.gz -C /opt/apps/

切到apps,改名(也可以不改)

mv redis-7.0.8/ redis

进入redis目录执行编译命令make

make

出现该提示表示编译完成 image.png

安装编译过的安装包

make install

image.png

共安装了三个组件:redis 服务器、客户端与一个性能测试工具 benchmark。

2.1.1 redis的启动与停止
  • 前台启动

在任意目录执行 redis-server 命令即可启动 Redis。可看到默认端口号为6379 image.png Ctrl C 停止

  • 命令式后台启动 使用 nohub 命令,最后再添加一个&符,可以使要启动的程序在后台以守护进程方式运行。会在当前目录中创建一个 nohup.out 文件用于记录 Redis 的操作日志。
 nohup redis-server &
  • redis的停止
redis-cli shutdown
  • 配置式后台启动

使用 nohup 命令可以使 Redis 后台启动,但每次都要键入 nohup 与&符,比较麻烦。可以通过修改 Linux 中 Redis 的核心配置文件 redis.conf 达到后台启动的目的。redis.conf 文件在 Redis 的安装目录根下。 image.png 将 daemonize 属性值由 no 改为 yes,使 Redis 进程以守护进程方式运行。 image.png

修改后再启动 Redis,就无需再键入 nohup 与&符了,但必须要指定启动所使用的 Redis 配置文件。

这是为什么呢? 使用 nohup redis-server &命令启动 Redis 时,启动项中已经设置好了 Redis 各个参数的 默认值,Redis 会按照这些设置的参数进行启动。但这些参数是可以在配置文件中进行修改的,修改后,需要在启动命令中指定要加载的配置文件。 Redis 已经给我们提供好了配置文件模板,是 Redis 安装目录的根目录下的 redis.conf 文件。由于刚刚对 redis.conf 配置文件做了修改,所以在开启 Redis 时需要显示指出要加载的 配置文件。配置文件应紧跟在 redis-server 的后面。

redis-server redis-conf

2.2连接前的配置

Redis 是一个数据库服务器,像 MySQL 一样,对其操作也需要通过客户端进行。若要使远程主机上的客户端能够连接并访问到服务端的 Redis,则服务端首先要做如下配置

2.2.1 绑定客户端IP

Redis 可以通过修改配置文件来限定可以访问自己的客户端 IP。 image.png

以上设置后,只允许当前主机访问当前的 Redis。如果不想限定访问的客户端,只需要将该行注释掉即可

2.2.2 关闭保护模式

默认保护模式是开启的。其只允许本机的客户端访问,即只允许自己访问自己。但生产中应该关闭,以确保其它客户端可以连接 Redis。

image.png

2.2.3 设置访问密码

对要读/写 Redis 的用户进行身份验证。没有密码的用户可以登录 Redis,但无法访问。

  • 密码设置

访问密码的设置位置在 redis.conf 配置文件中。默认是被注释掉的,没有密码。 image.png

  • 使用密码 登录时未使用密码,则访问时先输入密码;
auth 你设置的密码

image.png

登录时直接使用密码登录

redis-cli -a 密码
2.2.4 禁止/重命名命令

可在配置文件中给命令重命名,命名为""则为禁止该命令 image.png

2.3 redis配置文件详情

2.3.1 network

image.png

  • bind:前面说过
  • protected-mode:前面说过
  • port:redis:监听的端口
  • tcp-backlog:一个 TCP 连接的队列,主要用于解决高并发场景下客户端慢连接问题。 这里设置的值就是这个队列的长度。该队列与 TCP 连接的三次握手有关。不同的 Linux 内核, backlog 队列中存放的元素(客户端连接)类型是不同的。
    • Linux 内核 2.2 版本之前,该队列中存放的是已完成了第一次握手的所有客户端连接。此时 backlog 队列中的连接也具有两种状态:未完成三次握手的连接状态为 SYN_RECEIVED,已完成三次握手的连接状态为 ESTABLISHED。只有 ESTABLISHED 状态的连接才会被 Redis 处理。
    • 2.2 之后 TCP 系统中维护了两个队列:SYN_RECEIVED 队列与 ESTABLISHED 队列。SYN_RECEIVED 队列中存放未完成三次握手的连接,ESTABLISHED 队列中存放已完成三次握手的连接。此时的 backlog 就是 ESTABLISHED 队列。 backlog 队列的长度在 Linux 中由内核参数 somaxconn 来决定。所以,在 Redis 中该队列的长度由 Redis 配置文件设置与 somaxconn 来共同决定:取它们中的最小值。

查看当前 Linux 内核中 somaxconn 的值。

cat /proc/sys/net/core/somaxconn

修改/etc/sysctl.conf 文件,在文件最后添加如下内容:

net.core.somaxconn=2048
  • timeout:空闲超时。当客户端与 Redis 间的空闲时间超过该时长后,连接自动断开。默认为0,单位秒
  • tcp-keepalive:Redis 检测与其连接的所有客户端的存活性时间间隔,单位秒。一般在空闲超时设置为 0 时进行配置
2.3.2 general
  • daemonize:前面说过
  • pidfile:指定 Redis 运行时 pid 写入的文件,无论 Redis 是否采用守护进程方式启动, pid 都会写入到该配置的文件。如果没有配置 pid 文件,不同的启动方式,pid 文件的产生效果不同:
    • 采用守护进程方式启动(后台启动,daemonize 为 yes):pid 文件为/var/run/redis.pid。
    • 采用前台启动(daemonize 为 no):不生产 pid 文件
  • loglevel:配置日志的级别。Redis 中共有四个级别,由低到高依次是:
    • debug:可以获取到很多的信息,一般在开发和测试时使用。
    • verbose:可以获取到很多不太有用的信息,但不像 debug 级别那么多。
    • notice:可以获取到在生产中想获取到的适当多的信息,默认级别。
    • warning:只记录非常重要/关键的信息。
  • logfile:指定日志文件。如果设置为空串,则强制将日志记录到标准输出设备。如果使用的是守护进程启动方式,设置为空串,则意味着会将日志发送到设备/dev/null(空设备)。
  • databases:数据库的数量。默认数据库是 0 号数据库。
2.3.3 memory management
  • maxmemory:最大使用内存字节数。达到限制时,Redis 将根据选择的逐出策略尝试删除符合条件的key。 如果不能按照逐出策略移除 key,则会给写操作命令返回 error
  • maxmamory-policy
    • volatile-lru:使用近似 LRU 算法移除,仅适用于设置了过期时间的 key
    • allkeys-lru:使用近似 LRU 算法移除,可适用于所有类型的 key
    • volatile-lfu:使用近似 LFU 算法移除,仅适用于设置了过期时间的 key。
    • allkeys-lfu:使用近似 LFU 算法移除,可适用于所有类型的 key。
    • volatile-random:随机移除一个 key,仅适用于设置了过期时间的 key。
    • allkeys-random:随机移除一个 key,可适用于所有类型的 key。
    • volatile-ttl:移除距离过期时间最近的 key。
    • noeviction:不移除任何内容,只是在写操作时返回一个错误,默认值。