数据库系列文章:
关系型数据库:
- MySQL —— 基础语法大全
- MySQL —— 进阶
非关系型数据库:
- Redis 的安装与配置
- Redis 基本命令(上)
- Redis 基本命令(下)
一、Redis 概述
1.1 Redis 简介
Redis Remote Dictionary Server ,远程字典服务, 由意大利人 Salvatore Sanfilippo (又名 Antirez 开发, 是一个使用 ANSI C 语言 编写、支持网络、可基于 内存 亦可 持久化 的 日志型、 NoSQL 开源内存数据库 ,其提供多种语言的 API 。从 2010 年 3 月 15 日起, Redis 的开发工作由 VMware 主持。从2013 年 5 月开始, Redis 的开发由 Pivotal 赞助。
2008 年时 Salvatore Sanfilippo 自己开发一个叫 LLOOGG 的网站。
Redis 之所以称之为 字典服务,是因为 Redis 是一个 key-value
存储系统 。支持存储的 value
类型 有很多,包括 String
(字符串) 、 List
(链表) 、 Set
(集合) 、 Zset
(sorted set
有序集合) 和 Hash
(哈希类型) 等 。
Redis 的国际知名用户有, Twitter 、 GitHub 、 Facebook 等,国内知名用户有,阿里巴巴、腾讯、百度、搜狐、优酷、美团、小米等。熟练使用和运维 Redis 已经成为开发运维人员的一个必备技能。
⭐️ NoSQL
-
NoSQL(“
non relational
”, “Not Only SQL
”),泛指 非关系型的数据库。随着互联网 web2.0网站的兴起,传统的关系数据库在处理 web2.0 网站,特别是 超大规模 和 高并发 的SNS
(社交) 类型的 web2. 0 纯动态网站 已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。 NoSQL 数据库的产生就是为了解决 大规模数据集合 多重数据种类 带来的挑战,特别是大数据应用难题。
(1) 键值存储数据库
- 就像
Map
一样的key-value
对。典型代表就是 Redis 。
(2) 列存储数据库
-
关系型数据库 是典型的 行存储数据库。
- 其存在的问题是,按行存储的数据在 物理层面 占用的是 连续存储空间,不适合海量数据存储。
- 而按 列存储 则可实现 分布式存储,适合海量存储。典型代表是 HBase 。
(3) 文档型数据库
- 其是 NoSQL 与 关系型数据 的结合,最像关系型数据库 的 NoSQL。典型代表是MongoDB。
- 该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如
JSON
。
- 该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如
(4) 图形(Graph)数据库
- 用于存放一个 节点关系 的数据库,例如描述不同人间的关系。典型代表是Neo4J。
1.2 Redis 的用途
Redis 在生产中使用最多的场景就是 做数据缓存 。即客户端从 DBMS 中查询出的数据首先写入到 Redis 中,后续无论哪个客户端再需要访问该数据,直接读取 Redis 中的即可,不仅减小了 RT ,而且降低了 DBMS 的压力。
根据 Redis 缓存的数据与 DBMS 中数据的同步性划分,缓存一般可划分为两类: 实时同步缓存 与 阶段性同步缓存 。
- 实时同步缓存 是指,DBMS 中 数据更新 后, Redis 缓存中的存放的相关数据会被 立即清除,以促使再有对该数据的访问请求到来时,必须先从 DBMS 中查询获取到最新数据,然后再写入到 Redis 。
-
阶段性同步缓存 是指,Redis 缓存中的数据允许在一段时间 (
生存时长
) 内与 DBMS 中的数据不完全一致。而这个时间段就是这个缓存数据的 过期时间。
1.3 Redis 特性
能够做缓存的技术、中间件很多,例如,MyBatis
自带的二级缓存、 Memched
等。只所以在生产中做缓存的产品几乎无一例外的会选择 Redis ,是因为它有很多其它产品所不具备的特性。
-
性能极高: Redis 读的速度可以达到
11w次/s
,写的速度可以达到8w次/s
。只所以具有这么高的性能,因为以下几点原因:-
- Redis 的所有操作都是在内存中发生的。
-
- Redis 是用 C 语言 开发的。
-
- Redis 源码非常精细(集性能与优雅于一身)。
-
- 简单稳定: Redis 源码很少。早期版本只有 2w 行左右。从 3.0 版本开始,增加了集群功能,代码变为了 5w 行左右。
-
持久化: Redis 内存中的数据可以进行持久化,其有两种方式:
RDB
与AOF
。 - 高可用集群: Redis 提供了高可用的主从集群功能,可以确保系统的安全性。
-
丰富的数据类型: Redis 是一个
key-value
存储系统 。支持存储的value
类型很多,包括String
(字符串) 、List
(链表) 、Set
(集合) 、Zset
(sorted set
有序集合) 和Hash
(哈希类型)等,还有BitMap
、HyperLogLog
、Geospatial
类型。-
BitMap
:一般用于 大数据量 的 二值性统计 。 -
HyperLogLog
:其是Hyperlog Log
,用于对数据量超级庞大的日志做 去重统计。 -
Geospatial
:地理空间,其主要用于地理位置相关的计算。
-
-
强大的功能: Redis 提供了数据过期功能、发布/订阅功能、简单事务功能,还支持
Lua
脚本扩展功能。 - 客户端语言广泛: Redis 提供了简单的 TCP 通信协议,编程语言可以方便地的接入 Redis 。所以,有很多的开源社区、大公司等开发出了很多语言的 Redis 客户端。
- 支持 ACL 权限控制: 之前的权限控制非常笨拙。从 Redis6 开始引入了 ACL 模块,可以为不同用户定制不同的用户权限。
ACL,Access Control List ,访问控制列表,是一种 细粒度 的权限管理策略,可以针对 任意用户与组 进行权限控制。
- 目前大多数 Unix 系统与 Linux 2.6 版本已经支持 ACL 了。
- Zookeeper 早已支持 ACL 了。
- Unix与 Linux 系统默认使用是 UGO (User 、Group 、Other) 权限控制策略 ,其是一种 粗粒度 的权限管理策略。
- 支持多线程 IO 模型: Redis 之前版本采用的是单线程模型,从 6.0 版本开始 支持 了多线程模型。
1.4 Redis 的IO模型
Redis 客户端提交的各种请求是如何最终被 Redis 处理的?
- Redis 处理客户端请求所采用的 处理架构,称为 Redis 的 IO 模型。
- 不同版本的 Redis 采用的 IO 模型 是不同的。
⭐️ 1)、单线程模型
- 对于 Redis 3.0 及其以前版本, Redis 的 IO 模型采用的是 纯粹的单线程模型 。即所有客户端的请求全部由一个线程处理。
- Redis 的单线程模型采用了 多路复用技术 。
对于多路复用器的 多路复用技术 常见的有三种:
select
模型(数组)、poll
模型(链表)、epoll
模型。
select
模型底层是数组,性能较低,不常见。poll
模型的选择算法:采用的是轮询算法。该模型对客户端的就绪处理是 有延迟的 。epoll
模型的选择算法:采用的是回调方式。 根据就绪事件发生后的处理方式的不同,又可分为LT
模型与ET
模型。
- 每个客户端 若 要向 Redis 提交请求,都需要与 Redis 建立一个
socket
连接,并向 事件分发器 注册一个事件。一旦该事件发生就表明该连接已经就绪。而一旦连接就绪,事件分发器就会感知到,然后获取客户端通过该连接发送的请求,并将由该事件分发器所绑定的这个 唯一的线程 来处理。如果该线程还在处理多个任务,则将该任务写入到任务队列等待线程处理。 - 只所以称为事件分发器,是因为它会根据不同的就绪事件,将任务交由不同的事件处理器去处理。
⭐️ 2)、混合线程模型
- 从Redis 4.0 版本开始, Redis 中就开始加入了 多线程 元素 。处理客户端请求的仍是单线程模型,但对于一些 比较耗时但又不影响对客户端的响应的操作,就由后台其它线程来处理。
- 例如,持久化、 对 AOF 的
rewrite
、对失效连接的清理等。
- 例如,持久化、 对 AOF 的
⭐️ 3)、多线程模型
- Redis 6.0版本,才是真正意义上的多线程模型。因为其对于客户端请求的处理采用的是多线程模型。
- 多线程 IO 模型中的 “多线程” 仅用于接受、解析客户端的请求,然后将解析出的请求写入到任务队列。而对具体任务(命令)的处理,仍是由主线程处理。
- 这样做 使得用户 无需考虑 线程安全问题,无需考虑 事务控制, 无需考虑像 LPUSH/LPOP 等 命令的执行顺序问题 。
⭐️ 4)、优缺点总结 (面试)
(1) 单线程模型
- 优点:可维护性高,性能高。不存在并发读写 情况,所以也就 不存在执行顺序的不确定性,不存在线程切换开销,不存在死锁问题,不存在 为了数据安全而进行的 加锁/解锁开销。
- 缺点:性能会受到影响,且由于单线程 只能使用一个处理器(现在都是多处理器),所以会形成 处理器浪费。
内存的响应时长(RT): 100 n s 100ns 100ns
Redis 每秒处理的读写请求数量应该可以达到 1 s / 100 n s = 1 0 9 n s / 100 n s = 1 0 7 = 1 k w 1s/100ns = 10^9ns/100ns = 10^7 = 1kw 1s/100ns=109ns/100ns=107=1kw
实际情况是,Redis 每秒可以处理 8 w − 11 w 8w - 11w 8w−11w 的读写请求
(2) 多线程模型
- 优点:其结合了 多线程 与 单线程 的优点,避开了它们的所有不足。
- 缺点:该模型没有显示不足。如果非要找其不足的话就是,其并非是一个真正意义上的 ”多线程”,因为 真正处理任务的线程 仍是单线程。所以,其对性能也是有些影响的。
二、Redis 的安装与配置
这里是要将 Redis 安装到 Linux 系统中。
我的是 CentOS7,已经关闭防火墙,安装好了jdk,以及常用的命令工具。
2.1 Redis 的安装
⭐️ (2.1.1)、安装前的准备工作
1)、安装 gcc
- 由于 Redis 是由 C/C++ 语言编写的, 而从官网下载的 Redis 安装包是需要 编译后 才可安装的, 所以对其进行编译就必须要使用相关编译器。对于 C/C++ 语言的编译器,使用最多的是
gcc
与gcc-c++
,而这两款编译器在 CentOS 7 中是没有安装的,所以首先要安装这两款编译器。 -
GCC,
GNU Compiler Collection
, GNU 编译器集合。
yum -y install gcc gcc-c++
2)、下载 Redis
- Redis 的官网为: http://redis.io
3)、上传到 Linux
- 将下载好的压缩包上传到 Linux 的
/opt/tools
目录中 。
⭐️ (2.1.2)、安装 Redis
1)、解压 Redis
- 将 Redis 解压到
/opt/apps
目录中。
tar -zxvf redis-7.2.1.tar.gz -C /opt/apps/
- 进入到
/opt/apps
目录中 再将 Redis 解压包目录更名为redis
(不更名也无所谓,改名是为了简化目录名)。
mv redis-7.2.1/ redis
2)、编译
- 编译过程是根据 Makefile 文件进行的,而 Redis 解压包中已经存在该文件了。所以可以直接进行编译 了 。
- 在解压目录下,执行编译命令
make
进行编译。
如果没有准备好C语言编译环境,make 会报错 —
Jemalloc/jemalloc.h
:没有那个文件
解决办法:
- 首先看:
gcc
是否安装成功,成功后- 运行
make distclean
, 将编译文件清除掉,然后再在 redis 目录下再次执行make
命令(只是编译好)
- 当看到如下提示时,表示编译成功。
3)、安装
- 在 Linux 中对于编译过的安装包执行
make install
进行安装。
- 可以看到,共安装了三个组件:
redis 服务器
、客户端
与 一个性能测试工具benchmark
。
4)、查看 bin 目录
- 安装完成后,打开
/usr/local/bin
目录,可以看到出现了很多的文件。
- 通过
echo $PATH
可以看到,/usr/local/bin
目录是存在于该 系统变量 中的, 这样这些命令就可以在任意目录中执行了。
⭐️ (2.1.3)、Redis 启动与停止
1)、前台启动
- 在任意目录执行
redis-server
命令即可启动 Redis 。 这种启动方式会 占用当前命令行窗口。
- 再开启 一个会话窗口,可以查看到当前的 Redis 进程,默认端口号为
6379
。
ps aux | grep redis
- 通过 Ctrl + C 命令可以停止 Redis 。
2)、命令式后台启动
- 使用
nohup
命令,最后再添加一个&
符,可以使要启动的程序在后台以守护进程方式运行。
nohup redis-server &
- 这样的好处是,进程启动后不会占用一个会话窗口,且其还会在当前目录,即运行启动命令的当前目录中创建一个
nohup.out
文件用于记录 Redis 的操作日志。
3)、Redis 的停止
- 通过
redis-cli shutdown
命令可以停止 Redis 。
4)、配置式后台启动
- 使用
nohup
命令可以使 Redis 后台启动,但每次都要键入nohup
与&
符,比较麻烦。 - 可以通过修改 Linux 中 Redis 的核心配置文件
redis.conf
达到后台启动的目的。 -
redis.conf
文件在 Redis 的安装目录根下。
- 将
daemonize
属性值由no
改为yes
,使 Redis 进程以守护进程方式运行。
vim redis.conf
:set nu #显示行号
/daemonize #搜索daemonize
修改后再启动 Redis ,就无需再键入
nohup
与 符&
了,但必须要指定启动所使用的 Redis配置文件。 这是为什么呢?
- 使用
nohup redis-server &
命令启动 Redis 时,启动项中已经设置好了 Redis 各个参数的默认值, Redis 会按照这些设置的参数进行启动。但这些参数是可以在配置文件中进行修改的,修改后,需要在启动命令中指定要加载的配置文件,这样,配置文件中的参数值将覆盖原默认值。- Redis 已经给我们提供好了配置文件模板,是 Redis 安装目录的根目录下的
redis.conf
文件。由于刚刚对redis.conf
配置文件做了修改,所以在开启 Redis 时需要显示指出要加载的配置文件。配置文件应紧跟在redis-server
的后面。
redis-server /opt/apps/redis/redis.conf
ps aux | grep redis
2.2 连接前的配置
- Redis 是一个内存数据库服务器,就像 MySQL 一样,对其操作也需要通过 客户端 进行。
- 若要使 远程主机上的客户端 能够连接并访问到 服务端的 Redis ,则服务端首先要做如下配置。
⭐️ (2.2.1)、绑定客户端 IP
- Redis 可以通过修改配置文件来限定可以访问自己的 客户端 IP 。
- 以上设置后,只允许当前主机访问当前的 Redis ,其它主机均不可访问。 所以,如果不想限定访问的客户端,只需要将该行 注释掉 即可。
⭐️ (2.2.2)、关闭保护模式
- 默认保护模式是开启的。 其只允许本机的客户端访问, 即只允许自己访问自己。但生产中应该关闭, 以确保其它客户端可以连接 Redis 。
#命令模式下输入
:noh #去掉搜索出来的黄标
⭐️ (2.2.3)、设置访问密码
- 为 Redis 设置访问密码,可以对要读 写 Redis 的用户进行身份验证。没有密码的用户可以登录 Redis ,但无法访问。
1)、密码设置
- 访问密码的设置位置在
redis.conf
配置文件中。默认是被注释掉的,没有密码。
- 没有通过密码登录的用户,无法读/写Redis 。
2)、使用密码
- 对于密码的使用,有两种方式:登录时未使用密码,则访问时先输入密码;登录时直接使用密码登录,访问时无需再输入密码。
-
- A、 登录时未使用密码
-
- B、 登录时使用密码
-
- C、 退出时使用密码
3)、注意
- 为了方便后面的学习,我们这里就 不设置访问密码了,直接将其 注释掉 即可。
⭐️ (2.2.4)、禁止 / 重命名命令
- 后面要学习两个非常危险的命令:
flushal
与flushdb
。- 它们都是用于直接删除整个 Redis 数据库的。若让用户可以随便使用它们,可能会危及数据安全。
- Redis 可以通过修改配置文件来禁止使用这些命令,或重命名这些命令。
- 以下配置 ,禁用了
flushall 与 flushdb
命令。
当然,在学习过程中暂时不禁用它们。
⭐️ (2.2.5)、启动 Redis
- 当然,若要使客户端能够连接 Redis,则必须开启服务端的 Redis 。
redis-server /opt/apps/redis/redis.conf
2.3 Redis 客户端分类
Redis 客户端也像 MySQL 客户端一样有多种类型:命令行
客户端、图形界面
客户端、 Java代码
客户端。
⭐️ (2.3.1)、命令行客户端
- Redis 提供了基本的命令行客户端。打开命令行客户端的命令为
redis-cli
。
-
-h
:指定要连接的 Redis 服务器的 IP 。 -
-p
:指定要连接的 Redis 的 端口号。
若连接的是本机Redis ,且端口号没有改变,保持默认的 6379
,则 -h
与 -p
选项可以省略不写。
⭐️ (2.3.2)、图形界面客户端
1)、Redis Desktop Manager(下面演示使用该客户端)
- Redis 的图形界面客户端很多, 其中较出名的是 Redis Desktop Manager 的客户端。 不过,该软件原来是免费软件, 从 0.8.8 版本 后变为了商业化收费软件。
- 官网为: https://resp.app/(原来是 http://redisdesktop.com )。
百度网盘链接( 0.8.8版本):https://pan.baidu.com/s/1xnmm4TMuNd8eqslJ0rRm9A?pwd=e316
提取码:e316
2)、RedisPlus
- RedisPlus 是为 Redis 可视化管理开发的一款开源免费的桌面客户端软件,支持 Windows 、Linux 、 Mac 三大系统平台, RedisPlus 提供更加高效、方便、快捷的使用体验,有着更加现代化的用户界面风格。
- RedisPlus的官网地址为 https://gitee.com/MaxBill/RedisPlus 。
⭐️ (2.3.3)、Java 代码客户端
- 所谓 Java 代码客户端就是一套操作 Redis 的 API ,其作用就像 JDBC 一样,所以 Java 代码客户端其实就是一个或多个 Jar 包,提供了对 Redis 的操作接口。
- 对 Redis 操作的 API 很多 ,例如
jdbc-redis
、jredis
等 ,但最常用也是最有名的是Jedis
。
2.4 Redis 配置文件详解
- Redis 的核心配置文件
redis.conf
在安装根目录下,默认包含 2000 多行。 这些内容根据功能被划分为了很多部分。下面将一些 重要部分 进行介绍。
学习的过程有问题可以:1、查阅官方文档;2、读英文注释;3、看源码
⭐️ (2.4.1)、基础说明
这部分主要是给出一些说明,包含三部分意思:
- 第 1-6 行用于说明,如果要 启动 Redis ,需要指出 配置文件的路径。
- 第 8-16 行用于说明当前配置文件中可以使用的的 容量单位 及 意义。
- 第 18 行用于说明这些 容量单位 没有大小写之分。
⭐️ (2.4.2)、includes
指定要在当前配置文件中包含的配置文件。 这样做的目的主要是便于 配置信息管理:
- 可以将 不同场景 的配置都进行 单独定义,
- 然后在当前 核心配置文件 中根据 不同场景 选择包含进不同的配置文件。
⭐️ (2.4.3)、modules
- Redis 配置文件中可以通过 加载 不同的第三方模块,来增强、扩展 Redis 的功能。
⭐️ (2.4.4)、network
Network 配置模块是 比较重要的部分,主要进行网络相关的配置。其中较重要的有:
- 1)、bind
指定可以访问当前 Redis 服务的客户端 IP ,默认只允许本地访问,即当前 Redis 自己访问自己。
为了使所有其它客户端都可访问,一般要将其注释掉。
- 2)、protected-mode
默认保护模式是开启的。 其只允许本机的客户端访问,即只允许自己访问自己。
但生产中应该关闭,以确保其它客户端可以连接 Redis 。
- 3)、port
Redis 监听的连接端口号,默认 6379 。
- 4)、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
队列。
- 查看 Linux 内核版本:
uname -a
# 或
cat /proc/version
TCP 中的
backlog
队列的长度在 Linux 中由内核参数somaxconn
来决定。所以,在 Redis中该队列的长度由Redis 配置文件设置 与somaxconn
来共同决定:取它们中的最小值。
- 查看当前 Linux 内核中
somaxconn
的值。
cat /proc/sys/net/core/somaxconn
生产环境下(特别是高并发场景下),
backlog
的值最好要大一些,否则可能会影响系统性能。
- 修改
/etc/sysctl.conf
文件,在文件最后添加如下内容:net.core.somaxconn=2048
- 修改过后可以重启虚拟机,也可以通过执行如下命令来使新的修改生效。
sysctl -p # 内核在运行时,动态修改内核的运行参数
- 5)、timeout
空闲超时。当客户端与 Redis 间的 空闲时间 超过该时长后,连接自动断开。单位秒。默认值为 0,表示永远不超时 。
- 6)、tcp-keepalive
该配置主要用于设置Redis 检测 与 其连接的 所有客户端 的 存活性时间间隔,单位秒。一般是在空闲超时
timeout
设置为 0 时进行配置。(该方式会降低服务端的性能,还待商榷!)
如果连续检测 两次 都不在,则连接断开。
⭐️ (2.4.5)、general
- 1)、daemonize
该配置可以控制 Redis 启动是否采用守护进程方式,即是否是后台启动。
yes
是采用后台启动。
- 2)、pidfile
该配置用于指定 Redis 运行时
pid
写入的文件,无论 Redis 是否采用守护进程方式启动,pid
都会写入到该配置的文件。
注意,如果没有配置pid
文件,不同的启动方式,pid
文件的产生效果是不同的:
- 采用 守护进程 方式启动(后台启动,
daemonize
为yes
):pid
文件为/var/run/redis.pid
。- 采用 前台启动(
daemonize
为no
):不生产pid
文件
- 3)、loglevel
配置日志的级别。 Redis 中共有四个级别,由低到高 依次是:
debug
:可以获取到很多的信息,一般在 开发 和 测试 时使用。verbose
:可以获取到很多不太有用的信息,但不像debug
级别那么多。notice
:可以获取到在生产中想获取到的 适当多的信息,默认级别。warning
:只记录 非常重要 / 关键 的信息。
- 4)、logfile
指定日志文件。如果设置为空串,则强制将日志记录到 标准输出设备(显示器)。
如果使用的是 守护进程 启动方式,设置为空串,则意味着会将日志发送到设备/dev/null
(空设备)。
- 5)、databases
设置数据库的数量。默认数据库是 0 号数据库。
可以使用select dbid
在每个连接的基础上选择一个不同的数据库,其中dbid
是介于0
和'databases'-1
之间的数字 。
⭐️ (2.4.6)、security
- 用户设置 ACL 权限、 Redis 访问密码 相关配置。该模块中最常用的就是
requirepass
属性。
- 设置客户端访问密码。注释掉后则没有密码。
⭐️ (2.4.7)、clients
- 该模块用于设置与客户端相关的属性,其中仅包含一个属性
maxclients
。-
maxclients
用于设置 Redis 可 并发处理 的客户端连接数量, 默认值为 10000 。如果达到了该最大连接数,则会拒绝再来的新连接,并返回一个异常信息:已达到最大连接数。
-
注意,该值不能超过 Linux 系统支持的可打开的文件描述符最大数量阈值。查看该阈值的方式如下。修改该值,可以通过修改
/etc/secutiry/limits.conf
文件(自己查)。
ulimit -n
⭐️ (2.4.8)、memory management
该配置可以控制 最大可用内存 及 相关内容移除 问题。
- 1)、maxmemory
将内存使用限制设置为指定的字节数。当达到内存限制时, Redis 将根据选择的逐出策略
maxmemory-policy
尝试删除符合条件的key
。
如果不能按照逐出策略移除key
,则会给写操作命令返回error
,但对于只读的命令是没有影响的 。
- 2)、maxmamory-policy
该属性用于设置,当达到
maxmemory
时, Redis 将如何选择要移除的内容。 当然,如果没有符合相应策略的内容要删除,则在执行写入命令时会给出errors
的响应。 Redis 中共支持 8 种移除策略:
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
: 不移除任何内容,只是 在写操作时返回一个错误 ,默认值。
- 3)、maxmemory-samples
该属性用于指定挑选要删除的
key
的样本数量。 样本的选择采用的是 LRU 算法,其不能修改。但从样本中再选择要移除的key
,则采用的是maxmamory-policy
指定的策略。
- 4)、maxmemory-eviction-tenacity
设置移除容忍度。数值越小表示容忍度越低,需要移除的数据移除延迟越小;数值越大表示容忍度越高,需要移除的数据移除延迟越大。
⭐️ (2.4.9)、threaded I/O
该配置模块用于配置 Redis 对 多线程 IO 模型 的支持。
- 1)、io-threads
该属性用于指定要启用多线程IO 模型时,要使用的线程数量。
查看当前系统中包含的 CPU 数量lscpu
:
- 2)、io-threads-do-reads
该属性用于启用 多线程 IO 模型 中的 多线程处理读请求 的能力。文章来源:https://www.toymoban.com/news/detail-738577.html
注:仅供学习参考,如有不足,欢迎指正!!!文章来源地址https://www.toymoban.com/news/detail-738577.html
到了这里,关于Linux 系统安装 Redis7 —— 超详细操作演示!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!