基本概念
[!quote] Redis
Redis 是非关系型数据库,是基于内存的,键值数据存储系统,所以性能非常高(QPS 约为 10w),常用于数据库缓存,消息队列,会话存储 ……
- 原子性操作:Redis 的所有操作都是原子性的【
意味着操作要么完全执行,要么完全不执行】,这种特性保证了数据的一致性和完整性- 持久化:Redis 支持数据的持久化,可以将内存中的数据保存到磁盘中,以便在系统重启后恢复数据
- 发布/订阅模式:Redis 内置了发布/订阅模式,允许客户端之间通过消息传递进行通信
- 主从复制
单机与集群
- 在单机的 Redis 服务器中:你可以把数据存储在不同的 " 数据库 " 中,每个数据库都是隔离的,不可共享的
- 当使用 Redis 集群时:Redis 集群是由多台机器组成的,数据分散在这多台机器上,以便存储更多的数据,并且让数据处理速度更快。在这种情况下,每台机器上的 Redis 只能有一个 " 数据库 "
单机下的数据库的个数 Redis 默认支持 16 个数据库【~~可以通过配置文件支持更多,无上限~~】,客户端与 Redis 建立连接后会自动选择 0 号数据库,可以使用 `SELECT` 更换数据库
bash
# 选择 1 号数据库
redis> SELECT 1
OK- Redis 不支持自定义数据库的名字,每个数据库都以编号命名,开发者必须自己记住哪些数据库存储了哪些数据
- Redis 不支持为每个数据库设置不同的访问密码
一个 Redis 实例中的多个数据库不适宜存储不同应用程序的数据,不同的应用应该使用不同的 Redis 实例存储数据
- 使用 0 号数据库存储 A 应用生产环境中的数据,1 号数据库存储 A 应用测试环境中的数据 ✔️
- 使用 0 号数据库存储 A 应用的数据,1 号数据库存储 B 应用的数据 ❌
安装配置
使用 Docker 安装 :
- 使用 redis 的默认配置
bash
docker run \
--name redis \
-d \
-v /myredis/conf:/usr/local/etc/redis \
-p 6379:6379 \
redis- 自定义配置文件
redis.conf
bash
docker run -d -p 6379:6379 -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf连接服务
- 连接
- 使用命令行
- 连接本机的 redis 服务:输入
redis-cli即可使用命令行与 redis 进行通信 - 连接远程的 redis 服务:
redis-cli -h 主机号 -p 端口号 -a 密码
- 连接本机的 redis 服务:输入
- 使用 Redis 图形化界面工具 Redis InSight 连接
- 添加数据库
- 输入主机地址,端口号
- 使用命令行

如果你的 redis 设置了密码,客户端连接到服务端时,会要求身份验证【~~默认没有密码~~】
bash
# 查看密码
redis 127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""
# 设置密码
127.0.0.1:6379> CONFIG set requirepass "runoob"
redis 127.0.0.1:6379> AUTH runoob
OK
# 检测 redis 服务是否正在运行
redis 127.0.0.1:6379> PING
PONGQUIT关闭当前的 redis 连接SELECT index切换到指定的数据库,index介于 0 - 15
服务器命令
- 获取信息
info查看服务器的信息client list获取连接到服务器的客户端的列表CLIENT GETNAME获取当前连接的名称DBSIZE返回当前数据库的 key 的数量config get requirepass查看 redis 密码config get maxclients获取该 redis 服务允许的客户端最大连接数【~~可以在redis.conf文件中修改 ~~】
- 设置
CLIENT SETNAME connection-name设置当前连接的名称CLIENT KILL [ip:port]/[ID client-id]关闭指定的客户端连接CLIENT PAUSE timeout:在指定的时间内,暂时停止处理所有的客户端命令FLUSHDB删除当前数据库的所有 keyFLUSHALL删除所有数据库的所有 key
- 快照
bgsave保存当前数据库的数据到磁盘
- 优化
bgrewriteaof优化 AOF 文件的大小【AOF 文件用于记录每一次对数据库的写操作,以便在服务器重启后,能够恢复数据库的状态】
CLUSTER SLOTS:获取集群节点的映射数组CONFIG GET parameter:获取指定配置参数的值CONFIG REWRITE:对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写CONFIG SET parameter value:修改 redis 配置参数,无需重启。CONFIG RESETSTAT:重置 INFO 命令中的某些统计数据。DEBUG OBJECT key:获取 key 的调试信息DEBUG SEGFAULT:让 Redis 服务崩溃LASTSAVE:返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示MONITOR实时打印出 Redis 服务器接收到的命令,用于调试ROLE返回主从实例所属的角色SAVE同步保存数据到硬盘SHUTDOWN [NOSAVE] [SAVE]异步保存数据到硬盘,并关闭服务器SLAVEOF host port:将当前服务器转变为指定服务器的从属服务器 (slave server)。SLOWLOG subcommand [argument]:管理 Redis 的慢日志。SYNC:用于复制功能的内部命令
基本命令
SET,GET,DEL
不同的数据结构,设置,获取命令会有差异
SET 键名 值名设置键值对GET 键名根据键名,获取对应的值DEL 键名根据键名,删除键值对
bash
SET name redis
GET name
DEL name
---
"redis"Redis 默认不支持中文,所以在设置值时,设置的中文,会在读取时展示二进制数据 不过可以在进入 Redis 客户端时,指定 `--raw` 来显示数据的原始格式【`redis-cli --raw`】
CONFIG
- 永久改变配置项
配置项通常在 Redis 的配置文件 redis.conf 中定义,我们可以编辑这个文件来改变 Redis 服务器的行为,一旦保存更改并重启 Redis 服务器,配置就会永久生效
- 临时改变配置项【
只对当前的 Redis 服务器进程有效,如果服务器重启,这些变更就会丢失】
我们也可以使用 CONFIG 来查看,或临时设置配置项【服务器的运行模式,端口号,数据持久化的方式,连接的客户端数量上限,密码认证 ……】
bash
redis-cli
# 获取某个配置项
CONFIG GET loglevel
# 获取所有配置项
CONFIG GET *
# 临时修改某个配置项
CONFIG SET loglevel "notice"