根据视频【动力节点】Redis入门到高级教程,全网最新最全redis缓存教程,redis百科大全 进行整理
视频对应资料 https://pan.baidu.com/s/1IlM4LAU2gQqUMeN_B48t8w?pwd=egl7 提取码:egl7
Redis 相关文章汇总归纳整理于:https://www.yuque.com/u27599042/ckgabz
Redis 的安装
安装前的准备工作
安装 gcc
- GCC,GNU Compiler Collection,GNU 编译器集合。
- 由于 Redis 是由 C/C++语言编写的,而从官网下载的 Redis 安装包是需要编译后才可安装的,所以对其进行编译就必须要使用相关编译器。对于 C/C++语言的编译器,使用最多的是 gcc 与 gcc-c++,而这两款编译器在 CentOS7 中是没有安装的,所以首先要安装这两款编译器。
# 安装 gcc 编译器,一般 gcc 中会包含 gcc-c++ # 为了防止不包含,所以加上 gcc-c++ # -y 表示同意安装过程中的询问 yum -y install gcc gcc-c++
下载 Redis
- Redis 官网:https://redis.io/
- Redis 官网下载地址:https://redis.io/download/
将 Redis 发送到 Linux
- 使用 Xftp 工具将下载的 Redis 发送到 Linux 的 /opt/tools 目录下
安装 Redis
解压 Redis
- 在 /opt 目录下新建 apps 文件夹,进入 /opt/tools 目录,将 /opt/tools 目录的 Redis 解压到 /opt/apps 目录下
cd /opt mkdir apps cd /opt/tools tar -zxvf redis-7.0.12.tar.gz -C /opt/apps/
编译 Redis
- 编译过程是根据 Makefile 文件进行的,而 Redis 解压包中已经存在该文件了。所以可以直接进行编译。
# 进入解压的 redis 目录 cd /opt/apps/redis-7.0.12
# 编译 make
安装 Redis
- 在 Linux 中对于编译过的安装包执行 make install 进行安装。
make install
- 安装了:
- redis-server:redis 服务器
- redis-benchmark:性能测试工具
- redis-cli:redis 客户端
查看 Linux 的 bin 目录
- 安装完成后,进入 /usr/local/bin 目录,可以看到出现了很多的文件。
- 通过 echo $PATH 可以看到,/usr/local/bin 目录是存在于该系统变量中的,这样这些命令就可以在任意目录中执行了。
Redis 的启动和停止
前台启动 Redis
- 由于安装 Redis 后,/usr/local/bin 目录下有了 Redis 的相关命令,且 /usr/local/bin 目录是存在于该系统变量中,可以在任意目录执行 redis-server 命令启动 Redis
- 但是,这种启动方式会占用当前命令行窗口。
redis-server
查看 Redis 进程
- 再开启一个会话窗口,可以查看到当前的 Redis 进程,默认端口号为 6379。
ps aux | grep redis
前台启动方式停止 Redis
- 通过 Ctrl + C 命令可以停止 Redis。
后台启动 Redis
- 使用 nohub 命令,最后再添加一个 & 符,可以使要启动的程序在后台以守护进程方式运行。
- 进程启动后不会占用一个会话窗口,且其还会在当前目录,即运行启动命令的当前目录中创建一个 nohup.out 文件用于记录 Redis 的操作日志。
nohup redis-server &
停止 Redis
- 通过 redis-cli shutdown 命令可以停止Redis。
redis-cli shutdown
配置式后台启动 Redis
- 使用 nohup 命令可以使 Redis 后台启动,但每次都要键入nohup与&符,比较麻烦。
- 可以通过修改 Linux 中 Redis 的核心配置文件 redis.conf 达到后台以守护进程的形式启动 Redis 的目的。
- redis.conf 文件在 Redis 的安装目录根下。
- 将 Redis 核心配置文件中的 daemonize 属性值由 no 改为 yes,使 Redis 进程以守护进程方式运行。
# 编辑 redis.conf vi redis.conf # 开启行号 :set nu # 查找 daemonize 配置 /daemonize
# 保存修改并退出 :wq
- 修改后再启动 Redis,就无需再键入 nohup 与 & 符了,但必须要指定启动所使用的 Redis 配置文件。
- 使用 nohup redis-server & 命令启动 Redis 时,启动项中已经设置好了 Redis 各个参数的默认值,Redis 会按照这些设置的参数进行启动。这些参数是可以在配置文件中进行修改的,修改后,需要在启动命令中指定要加载的配置文件,这样,配置文件中的参数值将覆盖原默认值,否则将根据 Redis 各个参数的默认值启动 Redis
- Redis 安装目录的根目录下的 redis.conf 文件 是 Redis 已经给我们提供好了配置文件模板
redis-server /opt/apps/redis-7.0.12/redis.conf
配置 Redis 开机自启
新建系统服务文件
- 该系统文件用于配置指定 Redis 开机自启动时,不使用默认的启动配置项,而是使用我们自己配置文件中的配置项启动
vi /etc/systemd/system/redis.service
- 再系统服务文件中写入如下内容
[Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/usr/local/bin/redis-server 指定启动时Redis配置文件路径 PrivateTmp=true [Install] WantedBy=multi-user.target
- ExecStart,指定要执行的命令
- 修改编写完成后,保存退出编辑
重载系统服务
systemctl daemon-reload
查看当前 Redis 状态
systemctl status redis
启动 Redis 开机自启
systemctl enable redis
关机重启测试
Redis 的相关配置
- 修改配置后,记得重启 Redis
配置可以访问 Redis 的客户端 IP
- Redis 可以通过修改配置文件来限定可以访问自己的客户端 IP。
- 以上设置后,只允许当前主机访问当前的 Redis,其它主机均不可访问。所以,如果不想限定访问的客户端,只需要将该行注释掉即可。
关闭保护模式
- 默认保护模式是开启的。
- 只允许本机的客户端访问,即只允许自己访问自己。但生产中应该关闭,以确保其它客户端可以连接 Redis。
设置访问 Redis 的密码
- 为 Redis 设置访问密码,可以对要读/写 Redis 的用户进行身份验证。没有密码的用户可以访问 Redis,但无法进行操作。
- 设置 Redis 访问密码的配置项在 redis.conf 配置文件中,默认是被注释的,即默认情况下不需要密码,进行读写 Redis 不用进行用户身份验证
- 配置密码
使用密码
- 对于密码的使用,有两种方式:
- 登录时未使用密码,则访问时先输入密码;
- 登录时直接使用密码登录,访问时无需再输入密码。
登录时未使用密码
登录时使用密码
重命名 Redis 命令
- flushal 与 flushdb,都是用于直接删除整个 Redis 数据库的。若让用户可以随便使用它们,可能会危及数据安全。
- Redis 可以通过修改配置文件来禁止使用这些命令,或重命名这些命令。
- 以下配置,禁用了 flushall 与 flushdb 命令。
- 将两个命令重命名为空字符串,接下来无法使用该命令
Redis 客户端
Redis 客户端的分类
- Redis 客户端也像 MySQL 客户端一样有多种类型:
- 命令行客户端
- 图形界面客户端
- Java 代码客户端(API)
命令行客户端
- Redis 提供了基本的命令行客户端。打开命令行客户端的命令为 redis-cli。
- -a:指定连接 Redis 服务器时的密码
- 如果没有设置密码,则此选项可以省略
- -h:指定要连接的 Redis 服务器的 IP。
- 若连接的是本机 Redis,则 -h 选项可以省略不写。
- -p:指定要连接的 Redis 的端口号。
- 如果没有修改默认的端口号,保持默认的 6379,则 -p 选项可以省略不写。
图形界面客户端
Redis Desktop Manager
- Redis 的图形界面客户端很多,其中较出名的是 Redis Desktop Manager 的客户端。
- 不过,该软件原来是免费软件,从 0.8.8 版本后变为了商业化收费软件。
- 官网为:https://resp.app/(原来是 http://redisdesktop.com)。
免费版 Redis Desktop Manager(Windows)
- 下载地址:https://github.com/lework/RedisDesktopManager-Windows/releases
- 安装:解压压缩包,运行安装,下一步(根据自己需要修改安装路径)即可
RedisPlus
- RedisPlus 是为 Redis 可视化管理开发的一款开源免费的桌面客户端软件,支持 Windows 、Linux、Mac 三大系统平台,RedisPlus 提供更加高效、方便、快捷的使用体验,有着更加现代化的用户界面风格。
- RedisPlus 的官网地址为 https://gitee.com/MaxBill/RedisPlus。(停止更新和维护了)
图形界面客户端连接 Redis
- 这里使用的是https://github.com/lework/RedisDesktopManager-Windows/releases
- 关闭 Linux 防火墙
systemctl stop firewalld.service
- 启动 RESP
Java 代码客户端
- Java 代码客户端就是一套操作 Redis 的 API,其作用就像 JDBC 一样,所以 Java 代码客户端其实就是一个或多个 Jar 包,提供了对 Redis 的操作接口。
- 对 Redis 操作的 API 很多,例如 jdbc-redis、jredis 等,但最常用也是最有名的是 Jedis。
Redis 配置文件配置项详解
- Redis 的配置文件 redis.conf 中的配置项划分为若干个模块,每个模块之间采用
############### 模块名称 ############
进行分隔。
基础模块
INCLUDES
- 指定要在当前配置文件中包含的配置文件。
- 这样做的目的主要是便于配置信息管理:可以将不同场景的配置都进行单独定义,然后在当前核心配置文件中根据不同场景选择包含进不同的配置文件。
MODULES
- Redis 配置文件中可以通过加载不同的第三方模块,来增强、扩展 Redis 的功能。
NETWORK
- Network 配置模块主要进行网络相关的配置。
bind
- 指定可以访问当前 Redis 服务的客户端 IP,指定哪些 IP 地址可以访问 Redis 服务器,默认只允许本地访问,即当前 Redis 自己访问自己。
- 为了使所有其它客户端都可访问,一般要将其注释掉
protected-mode
- 默认保护模式是开启的。只允许本机的客户端访问,即只允许自己访问自己。
- 生产中应该关闭,以确保其它客户端可以连接 Redis。
port
- Redis 服务器监听的连接端口号,默认 6379。或者说 Redis 服务器运行的端口号
tcp-backlog
- tcp-backlog 是一个 TCP 连接的队列,其主要用于解决高并发场景下客户端慢连接问题。
- 这里设置的值就是这个队列的长度。
- 该队列与 TCP 连接的三次握手有关。不同的 Linux 内核, backlog 队列中存放的元素(客户端连接)类型是不同的。
- Linux 内核 2.2 版本之前,该队列中存放的是已完成了第一次握手的所有客户端连接, 其中就包含已完成三次握手的客户端连接。当然,此时的 backlog 队列中的连接也具有两种状态:未完成三次握手的连接状态为 SYN_RECEIVED,已完成三次握手的连接状态为 ESTABLISHED。只有 ESTABLISHED 状态的连接才会被 Redis 处理。
- Linux 内核 2.2 版本之后 TCP 系统中维护了两个队列:SYN_RECEIVED 队列与 ESTABLISHED 队列。SYN_RECEIVED 队列中存放的是未完成三次握手的连接,ESTABLISHED 队列中存放的是已完成三次握手的连接。此时的 backlog 就是 ESTABLISHED 队列。
- TCP 中的 backlog 队列的长度在 Linux 中由内核参数 somaxconn 来决定。所以,在 Redis 中该队列的长度由 Redis 配置文件设置与 somaxconn 来共同决定:取它们中的最小值。
- 生产环境下(特别是高并发场景下),backlog 的值最好要大一些,否则可能会影响系统性能。通过修改 /etc/sysctl.conf 文件
- 修改系统参数过后可以重启虚拟机,也可以通过执行
sysctl -p
命令来使新的修改生效。
查看 Linux 内核版本
uname -a cat /proc/version
查看当前 Linux 内核中 somaxconn 的值
cat /proc/sys/net/core/somaxconn
修改 /etc/sysctl.conf 文件,修改 Linux 中由内核参数 somaxconn
vi /etc/sysctl.conf
执行命令使系统文件新的修改生效
sysctl -p
timeout
- 空闲超时。
- 当客户端与 Redis 间的空闲时间超过该时长后,客户端和 Redis 服务器的连接会自动断开。
- 单位秒。默认值为 0,表示永远不超时。
tcp-keepalive
- 该配置主要用于设置 Redis 检测与其连接的所有客户端的存活性时间间隔,单位秒。
- 每个一段时间,检测与其连接的所有客户端是否还存活
- 一般是在空闲超时 timeout 设置为 0 时进行配置。
- 注意,如果要导致关闭连接,需要两倍的 tcp-keepalive 时间
GENERAL
daemonize
- 该配置可以控制 Redis 启动是否采用守护进程方式,即是否是后台启动。
- yes 表示采用后台启动。
- no 表示不采用后台启动
pidfile
- 该配置用于指定 Redis 运行时 pid(Redis 进程 id)写入的文件,无论 Redis 是否采用守护进程方式启动,pid 都会写入到该配置的文件(使用 pidfile 指定了文件)。
- 注意,如果没有配置 pid 文件,不同的启动方式,pid 文件的产生效果是不同的:
- 采用守护进程方式启动(后台启动,daemonize 为 yes):pid 文件为 /var/run/redis.pid(默认)。
- 采用前台启动(daemonize 为 no):不生产 pid 文件
- 注意,现代 Linux 操作系统中,使用“/run/redis.pid”作为 pid 写入的文件更符合要求,应该使用其代替“/var/run/redis_6379.pid”
loglevel
- 配置日志的级别。Redis 中共有四个级别,由低到高依次是:
- debug:可以获取到很多的信息,一般在开发和测试时使用。
- verbose:可以获取到很多不太有用的信息,但不像 debug 级别那么多。
- notice:可以获取到在生产中想获取到的适当多的信息,默认级别。
- warning:只记录非常重要/关键的信息。
logfile
- 指定日志文件,指定 Redis 运行日志记录的位置
- 如果设置为空串,则强制将日志记录到标准输出设备(显示器)。如果使用的是守护进程启动方式,设置为空串,则意味着会将日志发送到设备/dev/null(空设备)。
databases
- 设置数据库的数量。
- 默认数据库是 0 号数据库。
- 可以使用 select 在每个连接的基础上选择一个不同的数据库,其中 dbid 是介于 0 和’databases’-1’之间的数字。
SECURITY
- 设置 ACL 权限、Redis 访问密码相关配置。
requirepass
- 设置客户端访问 Redis 服务器时的密码。
- 该配置项注释掉后,则没有密码。
CLIENTS
- 该模块用于设置与客户端相关的属性,其中仅包含一个属性 maxclients。
maxclients
- maxclients 用于设置 Redis 可并发处理的客户端连接数量,默认值为 10000。
- 如果达到了该最大连接数,则会拒绝再来的新连接,并返回一个异常信息:已达到最大连接数。
- 注意,Linux 对每个用户可以同时打开文件数量有限制,并发处理过程中不能超过 Linux 系统支持的可打开的文件描述符最大数量阈值。
- 查看该阈值的方式如下。
ulimit -n
- 修改该值,可以通过修改/etc/secutiry/limits.conf 文件。
MEMORY MANAGEMENT
- 在 memory management 模块中,可以通过配置来控制最大可用内存及相关内容移除问题
maxmemory
- 配置 Redis 所能使用的内存的最大大小,设置的是 Redis 可以使用的内存的字节数
- 当达到内存限制时,Redis 将根据选择的逐出策略 maxmemory-policy 尝试删除符合条件的 key。如果不能按照逐出策略移除 key,则会给写操作命令返回 error,但对于只读的命令是没有影响的。
maxmemory-policy
- 该属性用于设置,当达到 maxmemory 时,Redis 将如何选择要移除的内容。
- 如果没有符合相应策略的内容要删除,则在执行写入命令时会给出 errors 的响应。如,创建新的 key、添加数据、修改存在的 key 等操作
- Redis 中共支持 8 种移除策略(默认使用 noeviction):
- 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:不移除任何内容,只是在写操作时返回一个错误,默认值。
- LRU:最近最少使用(最长时间)淘汰算法,LRU是淘汰最长时间没有被使用的。
- LFU:最不经常使用(最少次)淘汰算法,LFU是淘汰一段时间内,使用次数最少的
maxmemory-samples
- 该属性用于指定挑选要删除的 key 的样本数量。
- 默认值为 5,此设置下可以很好的工作,修改为 10 可以非常精确的选择出应该删除的 key,但是需要更多的 CPU,设置为 3 可以很快选择出要删除的 key,但是不够精确,不一定是合适于删除的
- 从所有的 key 中根据 LRU 算法选出指定数量的样本,这些样本是候选删除的 key,再从这些样本中根据 maxmamory-policy 指定的策略选择要移除的 key
- 样本的选择采用的是 LRU 算法,挑选样本的策略不能修改。但从样本中再选择要移除的 key,则采用的是 maxmamory-policy 指定的策略。
maxmemory-eviction-tenacity
- 设置移除容忍度。默认为 10
- 数值越小表示容忍度越低,需要移除的数据移除延迟越小;数值越大表示容忍度越高,需要移除的数据移除延迟越大
- 设置为 0,挑选出要删除的 key,就立马进行删除
THREADED I/O
- 该配置模块用于配置 Redis 对多线程 IO 模型的支持
io-threads
- 该属性用于指定要启用多线程 IO 模型时,要使用的线程数量。
- 默认情况下,Redis 的多线程是被禁用的,建议在有至少 4 个处理核心或者更多的情况下启用,并且至少留下一个处理核心,建议在有性能问题时再启用多线程,因为多线程会占用相当大部分的 CPU 时间
- 如果机器是一个四核机器,建议使用 2 或 3 个 I/O 线程,如果有8个核心,建议使用6个线程。
io-threads-do-reads
- 该属性用于启用多线程 IO 模型中的多线程处理读请求的能力,配置 IO 线程是否可以读写数据
- 如果只有一个 IO 线程,那么真正处理请求的线程为主线程