Skip to content

基本概念

[!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 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
PONG

  • QUIT 关闭当前的 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 删除当前数据库的所有 key
    • FLUSHALL 删除所有数据库的所有 key
  • 快照
    • bgsave 保存当前数据库的数据到磁盘
  • 优化
    • bgrewriteaof 优化 AOF 文件的大小【AOF 文件用于记录每一次对数据库的写操作,以便在服务器重启后,能够恢复数据库的状态】

  1. CLUSTER SLOTS:获取集群节点的映射数组
  2. CONFIG GET parameter:获取指定配置参数的值
  3. CONFIG REWRITE:对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写
  4. CONFIG SET parameter value:修改 redis 配置参数,无需重启。
  5. CONFIG RESETSTAT:重置 INFO 命令中的某些统计数据。
  6. DEBUG OBJECT key:获取 key 的调试信息
  7. DEBUG SEGFAULT:让 Redis 服务崩溃
  8. LASTSAVE:返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示
  9. MONITOR 实时打印出 Redis 服务器接收到的命令,用于调试
  10. ROLE 返回主从实例所属的角色
  11. SAVE 同步保存数据到硬盘
  12. SHUTDOWN [NOSAVE] [SAVE] 异步保存数据到硬盘,并关闭服务器
  13. SLAVEOF host port:将当前服务器转变为指定服务器的从属服务器 (slave server)。
  14. SLOWLOG subcommand [argument]:管理 Redis 的慢日志。
  15. 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"