Redis
Redis(REmote Dicitonary Server):基于键值对的NoSQL数据库(Key-Value)
1)默认占用6379端口;
2)Redis的所有数据均保存在内存;
3)内存中数据可通过快照或日志方式存储到硬盘;
4)基于C语言开发(无需系统库),且为单线程架构;
单线程架构
Redis高性能:单线程架构、I/O多路复用
1)单线程避免线程切换和竞态产生的消耗;
2)Redis通过epoll事件模型实现I/O多路复用;
3)Redis将epoll中的连接、读写和关闭均转换为事件处理;
如:Redis的I/O多路复用
客户端命令执行流程:发送命令、执行命令、返回结果
1)由于Redis是单线程的,所有接收到的命令都会先存入到执行队列中;
2)Redis线程会按照执行队列顺序依次执行各个命令(不存在同时);
3)命令执行的顺序根据该命令到达服务端时间判断;
//每个命令的执行时间是受限制的
如:Redis服务端接收客户端命令后的执行流程
Redis安装
Redis安装方式分为:通过系统管理软件安装、源码编译安装
1)通过系统管理软件安装的版本较为落后(不建议);
2)源码编译安装可保证为最新版(但需已安装gcc编译器);
源码安装Redis流程:
(1)获取源码(也可从官网下载源码后,上传至服务器)
mkdir -p /opt/redis
cd /opt/redis
wget 源码网站下载路径
tar zxmf 压缩包名
(2)安装(生成特定版本的软连接目录,便于后续对Redis版本升级)
ln -s 解压目录名 redis
cd redis
make && make install
如:从官网下载6.2.6版本的Redis,并在/opt/redis目录下解压安装
1)获取源码;
2)安装并验证
//安装完成后可通过“redis-cli -v”输出版本号以验证是否安装成功
若安装时报错,删除解压目录并安装以下两个软件后再进行安装:
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
Redis Shell
安装完成后/usr/local/bin有以下6个以redis开头的可执行文件(Redis Shell)
可执行文件 | 作用 |
---|---|
redis-server | 启动服务端 |
redis-cli | 命令行客户端 |
redis-benchmark | 基准性能测试 |
redis-check-aof | AOF持久化文件检测和修复 |
redis-check-dump | RDB持久化文件检测和修复 |
redis-sentinel | 启动哨兵 |
如:列出Redis安装后/usr/local/bin目录下以redis开头的可执行文件
redis-cli
redis-cli命令:提供Redis的命令行客户端
1)格式:redis-cli 选项
(1)交互式连接选项:
选项 | 含义 |
---|---|
-h | 指定服务端Redis的IP |
-p | 指定服务端Redis的端口 |
-c | 连接Redis Cluster时防止moved和ask异常 |
-a | 指定连接密码 |
–slave | 将当前客户端模拟成Redis节点的从节点连接 (可获取Redis节点更新操作) |
(2)命令式连接选项:
选项 | 含义 |
---|---|
-r | 命令式连接时,命令的执行次数 |
-i | 命令式连接时,相隔N秒执行一次命令 (必须配合-r选项,且N可为浮点数) |
-x | 命令式连接时,将标准输入作为最后一个参数 |
–scan | 渐进式遍历键 (等同于SCAN命令) |
–pipe | 将命令封装成Pipeline格式再发出 |
–raw | 以可读性较高的格式返回数据 |
–no-raw | 以二进制格式返回数据 |
Pipeline:将Redis客户端的多个命令打包后统一发送至服务端
1)可将原本N个命令的N个RTT时间缩减为1个RTT时间;
2)返回结果和发送命令的顺序保持一致(两者均为集合格式);
3)Pipeline是非原子性的,且客户端和服务端需同时支持;
//在Pipeline中指定过多命令时存在Redis阻塞风险(可分为多个小Pipeline)
(3)获取服务端Redis选项:
选项 | 含义 |
---|---|
–stat | 返回服务端Redis相关信息 |
–rdb | 请求服务端Redis生成RDB持久化文件 存储至当前目录 |
–bigkeys | 返回占用内存较大的键 (通过SCAN命令遍历得出) |
–latency | 返回客户端和服务端Redis的网络延迟 |
–lantency-history | 动态刷新显示客户端和服务端Redis的网络延迟 |
redis-server
redis-server命令:启动服务端Redis
1)格式:redis-server 选项
(1)常用选项:
选项 | 含义 |
---|---|
–参数 值 | 以指定参数配置启动 |
文件路径 | 以指定文件作为配置文件启动 |
–test-memory N | 测试是否可分配N M的内存 |
redis-benchmark
redis-benchmark命令:提供服务端Redis的基准性能测试
1)格式:redis-benchmark 选项
(1)常用选项:
选项 | 含义 |
---|---|
-c | 测试服务端Redis的并发连接数量 (默认值50) |
-n | 测试服务端Redis可接收命令执行请求的总量 (默认值1000) |
-k | 测试服务端Redis是否开启keepalive (1为开启,0为关闭) |
-t | 对指定命令执行基准测试 |
-q | 仅返回测试信息中的requests per second字段 |
–csv | 将测试结果以CSV格式返回 |
Redis管理
启动
Redis服务启动分为:默认配置启动、指定配置启动、配置文件启动
1)默认启动:所有参数配置根据默认值指定;
2)指定配置:启动时指定部分参数配置,未指定的均使用默认值;
3)配置文件:根据配置文件的启动参数,系统自动进行指定配置启动;
//Redis的安装目录下的“redis.conf”存储Redis的默认配置
Redis启动命令格式:
1)默认启动:redis-server
2)指定配置:redis-server --参数1 值1 --参数N 值N
3)配置文件:redis-server 文件路径
//指定的配置文件必须以“conf”为文件后缀
如:默认启动Redis
常用配置参数如下:
配置参数 | 含义 |
---|---|
port | 占用端口 |
logfile | 存储日志文件名 |
dir | 进程的工作目录 (同时存储持久化文件和日志文件) |
daemonize | 是否以守护进程方式运行 |
连接
Redis客户端连接分为:交互式连接、命令式连接
1)交互式连接:分配伪终端与Redis服务进行交互;
2)命令式连接:将特定命令发送于Redis服务并返回其运行结果;
Redis连接命令格式:
redis-cli -h IP地址 -p 端口号 选项 命令
1)若指定命令,则为命令式连接(反之为交互式连接);
2)若未指定IP地址和端口号,则默认值分别为127.0.0.1和6379;
选项 | 含义 |
---|---|
-a | 指定服务端Redis密码 |
-c | 集群模式下根据MOVED信息自动进行重定向 |
如:交互式连接Redis服务器,并执行命令验证
关闭
Redis服务关闭分为:内置命令、外部信号
1)内置命令:Redis客户端执行“shutdown”命令;
2)外部信号:通过kill命令发送强制关闭信号结束进行以关闭服务;
//外部信号关闭可能导致持久化文件出错
内置命令关闭服务格式(交互式连接使用):
shutdown nosave或save
1)也可通过命令式连接使用该命令;
2)“nosave或save”指定关闭前是否生成持久化文件;
//Redis关闭时,在与客户端断开连接后默认生成持久化文件
如:通过交互式连接关闭Redis服务,并查看服务端的日志信息
1)客户端执行命令;
2)Redis服务端的日志显示信息;
数据库
数据库:Redis中相互隔离管理键值对的容器
1)Redis默认有16个数据库,数据库名从0开始计数;
2)默认使用0号数据库,切换到其他数据库时命令行会有后缀显示;
3)Redis Cluster只允许使用0号数据库(不建议使用多数据库功能);
//使用多个数据库本质上仍在同一个CPU上工作,存在互相影响可能(单线程)
(1)切换数据库:SELECT 数据库号
1)数据库号默认只存在0~15;
(2)清空当前库中所有键:FLUSHDB
1)若库中键值对数量较多时,存在Redis阻塞风险;
(3)清空所有库中所有键:FLUSHALL
1)若库中键值对数量较多时,存在Redis阻塞风险;