No Sql之 Redis配置与优化

No Sql之 Redis配置与优化

Redis 核心技术笔记

一、基础概念
  1. 定义
    • Redis(Remote Dictionary Server)是开源的内存键值对数据库,支持多种数据结构(字符串、哈希、列表、集合、有序集合等)。
    • 特性:高性能(单线程 + 多路复用)、持久化、集群、发布订阅。
  2. 典型应用场景
    • 缓存:热点数据加速查询(如电商商品详情页缓存)。
    • 计数器:点赞数、访问量(原子性 INCR 操作)。
    • 消息队列:基于 LPUSH/RPOP 或发布订阅实现异步任务。
    • 排行榜:有序集合(Sorted Set)实现实时排名(如游戏分数)。
    • 分布式锁SETNX 或 RedLock 算法实现并发控制。
二、数据结构与操作
数据结构 常用命令 应用场景
字符串 SET/GET/INCR/DECR/MSET 缓存、计数器、分布式 session
哈希 HSET/HGET/HGETALL/HMSET 对象存储(如用户信息)
列表 LPUSH/RPOP/RANGE/LTRIM 消息队列、最新动态列表(栈 / 队列结构)
集合 SADD/SMEMBERS/SISMEMBER/SUNION/SDIFF 去重数据、交集计算(如共同好友)
有序集合 ZADD/ZRANGE/ZREVRANGE/ZRANK/SCORE 排行榜、时间线(按分数排序)
三、持久化机制

Redis 提供两种持久化方式,可单独或同时使用:

  1. RDB(快照)

    • 原理:定期将内存数据生成二进制快照文件(.rdb)。
    • 触发方式
      • 手动:SAVE(阻塞)或BGSAVE(异步)。
      • 自动:配置save参数(如save 900 1表示 900 秒内至少 1 次写操作)。
    • 优点:文件小,恢复快,适合全量备份。
    • 缺点:可能丢失最后一次快照后的数据。
  2. AOF(日志追加)

    • 原理:记录每个写命令到日志文件(.aof),重启时重放命令恢复数据。
    • 同步策略
      • appendfsync always:每次写操作同步,安全性最高,性能最差。
      • appendfsync everysec:每秒同步(默认),最多丢失 1 秒数据。
      • appendfsync no:由操作系统决定,性能最好,安全性最差。
    • 优点:数据安全性高,支持增量持久化。
    • 缺点:日志文件大,恢复速度较慢。
  3. 对比与选择

    场景 推荐方案
    纯缓存,允许数据丢失 关闭持久化或仅 RDB
    需快速恢复,允许少量数据丢失 仅 RDB
    需高安全性,不接受数据丢失 仅 AOF(everysec)
    兼顾安全性和恢复速度 同时开启 RDB 和 AOF
四、内存管理
  1. 内存分配与监控

    • INFO memory
      

      命令查看内存使用详情:

      • used_memory:Redis 分配的总内存。
      • used_memory_rss:操作系统实际分配的内存(含碎片)。
      • mem_fragmentation_ratio:碎片率(理想值 1.03~1.5)。
  2. 内存淘汰策略(maxmemory_policy)

    • allkeys-lru:删除最近最少使用的键(推荐)。
    • volatile-lru:删除有过期时间的键中最近最少使用的。
    • noeviction:内存满时拒绝写操作(默认)。
  3. 内存优化

    • 避免大键值(如超过 10KB 的字符串)。
    • 合理设置过期时间(EXPIRE 命令)。
    • 定期清理冷数据或使用 LRU 淘汰策略。
五、高可用方案
  1. 主从复制(Master-Slave)
    • 配置:从节点通过 slaveof 连接主节点。
    • 特点:读写分离,主节点负责写,从节点负责读;自动同步数据。
  2. 哨兵模式(Sentinel)
    • 作用:监控主从节点状态,自动故障转移(Failover)。
    • 配置:部署多个 Sentinel 节点,通过投票机制选举新主节点。
  3. 集群模式(Cluster)
    • 分片机制:将数据按哈希槽(16384 个)分布到多个节点,每个节点负责部分槽位。
    • 高可用:每个主节点有多个从节点,主节点故障时从节点自动晋升。
六、性能优化
  1. 单线程与多路复用
    • Redis 主线程采用单线程处理命令,避免多线程上下文切换开销。
    • 使用 Epoll 实现高并发连接(支持 10 万 + QPS)。
  2. 慢查询优化
    • 通过 slowlog get 命令查看慢查询日志。
    • 避免使用 KEYS *SORT 等全量操作,改用 SCAN 分批处理。
  3. 网络优化
    • 客户端与 Redis 服务器尽量部署在同一局域网。
    • 启用 TCP _NODELAY 选项减少网络延迟。
七、安全配置
  1. 基础安全措施

    • 禁用默认端口(6379),修改为自定义端口。
    • 配置 requirepass 设置密码认证。
    • 使用 bind 限制可访问的 IP(如 bind 127.0.0.1 192.168.1.101)。
  2. 高级安全策略

    • 部署防火墙,仅允许信任的 IP 访问 Redis 端口。

    • 禁用危险命令(如FLUSHALL,CONFIG

      rename-command FLUSHALL ""
      
    • 定期备份 RDB/AOF 文件并加密存储。

八、常见问题排查
  1. 内存碎片过高
    • 现象:mem_fragmentation_ratio > 1.5
    • 解决:重启 Redis 或启用主动碎片整理(activedefrag yes)。
  2. 缓存雪崩
    • 原因:大量缓存同时过期导致请求直接打向后端数据库。
    • 解决:设置随机过期时间,避免集中失效。
  3. 缓存穿透
    • 原因:查询不存在的数据,导致每次请求都穿透到数据库。
    • 解决:缓存空值或使用布隆过滤器预过滤。
九、典型配置示例
# redis.conf 核心配置

# 基础配置
bind 127.0.0.1 192.168.1.100  # 监听本地和局域网 IP
port 6379
requirepass your_strong_password

# 持久化配置
save 900 1  # RDB 快照:900 秒内至少 1 次写操作
appendonly yes  # 启用 AOF
appendfsync everysec  # AOF 同步策略:每秒一次

# 内存配置
maxmemory 2GB  # 最大内存限制
maxmemory-policy allkeys-lru  # 内存淘汰策略

# 集群配置(若启用)
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
十、常用命令速查表
功能 命令示例
连接与认证 redis-cli -h host -p port -a password
键操作 KEYS pattern, EXISTS key, DEL key, EXPIRE key seconds
字符串操作 SET key value, GET key, INCR key, MSET key1 val1 key2 val2
哈希操作 HSET hash field value, HGET hash field, HGETALL hash
列表操作 LPUSH list value, RPOP list, LRANGE list 0 -1
集合操作 SADD set member, SMEMBERS set, SINTER set1 set2
有序集合操作 ZADD zset score member, ZRANGE zset 0 -1, ZSCORE zset member
服务器管理 INFO, CONFIG GET parameter, FLUSHDB, FLUSHALL

Redis示例

1,安装和部署

Redis 的安装相对于其他服务来说比较简单 。首先需要到 Redis 官网(https://www.redis.io)下载相应的源码软件包,然后上传至 Linux 系统的服务器中进行解压、安装。本章中以 redis-4.0.9.tar.gz 为例进行 Redis 服务的安装和配置讲解。

通常情况下,在 Linux 系统中进行源码编译安装,需要先执行./configure进行环境检查与配置,从而生成 Makefile 文件,再执行 make && make instal1命令进行编译安装。而 Redis 源码包中直接提供了 Makefile 文件,所以在解压完软件包后,可直接进入解压后的软件包目录,执行make与 make install命令进行安装。

###安装依赖环境
[root@localhost ~]# dnf -y install gcc zlib-devel
[root@localhost ~]# ls
redis-4.0.9.tar.gz
###解压缩
[root@localhost ~]# tar xf redis-4.0.9.tar.gz 
[root@localhost ~]# cd redis-4.0.9
###编译安装
[root@localhost redis-4.0.9]# make && make PREFIX=/usr/local/redis/ install
###连接方便操作
[root@localhost redis-4.0.9]# ln -s /usr/local/redis/bin/* /usr/local/bin

make install 只是安装了二进制文件到系统中,并没有启动脚本和配置文件。软件包中默认提供了一个 install server.sh 脚本文件,通过该脚本文件可以设置 Redis 服务所需要的相关配置文件。当脚本运行完毕,Redis 服务就已经启动,默认侦听端口为 6379。

# 进入Redis源码的工具目录(包含安装脚本和辅助工具)
[root@localhost redis-4.0.9]# cd utils/
# 执行官方提供的安装服务脚本(用于配置Redis为系统服务)
[root@localhost utils]# ./install_server.sh
# 脚本启动后的交互式配置过程:
# 1. 选择Redis实例的监听端口(默认6379)
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 

# 2. 指定配置文件路径(默认/etc/redis/6379.conf)
Please select the redis config file name [/etc/redis/6379.conf] 

# 3. 指定日志文件路径(默认/var/log/redis_6379.log)
Please select the redis log file name [/var/log/redis_6379.log] 

# 4. 指定数据存储目录(默认/var/lib/redis/6379)
Please select the data directory for this instance [/var/lib/redis/6379] 

# 5. 指定Redis服务器可执行文件路径(需提前编译安装)
Please select the redis executable path [/usr/local/bin/redis-server] 

# 确认配置摘要信息(端口、配置文件、日志、数据目录等)
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli

# 安装过程关键步骤:
# 1. 复制配置模板到指定位置(/etc/init.d/redis_6379)
Copied /tmp/6379.conf => /etc/init.d/redis_6379

# 2. 将Redis服务添加到系统服务管理(chkconfig)
Installing service...
Successfully added to chkconfig!

# 3. 设置Redis服务在运行级别3、4、5(多用户模式)下自动启动
Successfully added to runlevels 345!

# 4. 启动Redis服务并验证安装成功
Starting Redis server...
Installation successful!

Redis 安装完成,可通过 Redis 的服务控制脚本/etc/init.d/redis 6379来对 Redis 服务进行控制,如停止 Redis 服务、启动 Redis 服务、重启 Redis服务、查看 Redis 运行状态。

[root@localhost utils]# netstat -anpt |grep 6379
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      12626/redis-server  

# 使用初始化脚本管理Redis服务(适用于SysVinit系统)

# 停止Redis服务
# - 执行停止命令,发送SIGTERM信号给Redis进程
# - 等待Redis优雅关闭(完成持久化操作)
[root@localhost utils]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped

# 启动Redis服务
# - 读取配置文件(/etc/redis/6379.conf)
# - 以守护进程模式启动Redis服务器
# - 日志输出到/var/log/redis_6379.log
[root@localhost utils]# /etc/init.d/redis_6379 start
Starting Redis server...

# 重启Redis服务(先停止再启动)
# - 常用于配置文件修改后重新加载
# - 包含优雅停止和启动的完整流程
[root@localhost utils]# /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...

# 查看服务状态
# - 检查Redis进程是否存在
# - 显示进程ID(PID)和运行状态
# - 若服务未运行,会提示"Redis is not running"
[root@localhost utils]# /etc/init.d/redis_6379 status
Redis is running (12659)  # PID为12659的Redis进程正在运行

2.配置和参数

Redis主配置文件为/etc/redis/6379.conf,由注释行与设置行两部分组成。与大多数Linux配置文件一样,注释性的文字以"#"开始,包含了对相关配置内容进行的说明和解释。除了注释行与空行以外的内容即为设置行。可根据生产环境的需求调整相关参数如下

[root@localhost utils]# vim /etc/redis/6379.conf 
bind 127.0.0.1 192.168.10.101  ###监听主机地址
port 6379                      ###端口号
daemonize  yes				   ###启用守护进程
pidfile  /var/run/redis_6379.pid ###指定PID文件
loglevel notice  				###日志级别
logfile  /var/log/redis_6379.log ###指定日志文件
[root@localhost utils]# /etc/init.d/redis_6379 restart

除了上述配置参数外,Redis 主配置文件中还包含很多其它的配置参数,

2.1配置核心参数详解
基础服务配置
# 绑定监听的 IP 地址(默认仅本地访问)
bind 127.0.0.1

# 监听端口(默认 6379)
port 6379

# 是否以守护进程方式运行(默认 no)
daemonize yes

# 进程文件路径
pidfile /var/run/redis_6379.pid

# 日志级别(debug|verbose|notice|warning)
loglevel notice

# 日志文件路径(若为 "" 则输出到标准输出)
logfile /var/log/redis_6379.log

# 数据库数量(默认 16 个,通过 SELECT 命令切换)
databases 16
内存管理配置
# 最大内存限制(例如 2GB、512MB)
maxmemory 2gb

# 内存不足时的淘汰策略
maxmemory-policy allkeys-lru  # 优先删除最近最少使用的键

# 内存碎片自动整理(Redis 4.0+ 支持)
activedefrag yes              # 启用自动碎片整理
active-defrag-ignore-bytes 100mb  # 碎片超过 100MB 时触发
active-defrag-threshold-lower 10  # 碎片率超过 10% 时触发
持久化配置
# RDB 持久化配置
save 900 1            # 900 秒内至少 1 次写操作则生成快照
save 300 10           # 300 秒内至少 10 次写操作则生成快照
save 60 10000         # 60 秒内至少 10000 次写操作则生成快照
dbfilename dump.rdb   # 快照文件名
dir /var/lib/redis    # 数据文件存储目录

# AOF 持久化配置
appendonly yes        # 启用 AOF
appendfilename "appendonly.aof"
appendfsync everysec  # 每秒同步一次(默认)
no-appendfsync-on-rewrite no  # 重写时是否禁止同步
auto-aof-rewrite-percentage 100  # AOF 文件体积比上次重写后增长 100% 时触发重写
auto-aof-rewrite-min-size 64mb   # AOF 文件最小重写体积
主从复制配置
# 从节点配置(主从复制)
slaveof <masterip> <masterport>  # 设置主节点 IP 和端口
masterauth <master-password>     # 主节点密码(若有)

# 从节点是否接受读请求(默认 yes)
slave-read-only yes

# 复制积压缓冲区大小(用于断点续传)
repl-backlog-size 1mb
安全配置
# 设置访问密码(强烈建议生产环境配置)
requirepass your_strong_password

# 重命名危险命令(例如禁用 FLUSHALL)
rename-command FLUSHALL ""
rename-command CONFIG "RENAME_CONFIG"  # 重命名后需使用新命令名调用

# 客户端连接空闲超时时间(秒)
timeout 300
网络配置
# TCP 连接相关参数
tcp-backlog 511         # TCP 连接队列长度
tcp-keepalive 300       # TCP 保活时间(秒)

# 是否开启 TCP_NODELAY(默认 no,关闭 Nagle 算法)
tcp-nodelay no

# 最大客户端连接数
maxclients 10000
集群配置
# 启用集群模式
cluster-enabled yes

# 集群配置文件(自动生成)
cluster-config-file nodes.conf

# 节点超时时间(毫秒)
cluster-node-timeout 15000

# 集群是否允许手动故障转移
cluster-allow-replica-migration yes
慢查询日志配置
# 慢查询日志阈值(微秒)
slowlog-log-slower-than 10000  # 执行时间超过 10 毫秒的命令记录到日志

# 慢查询日志最多存储的命令数
slowlog-max-len 128

3.Redis 命令工具

Redis 软件提供了多个命令工具。安装 Redis 服务时,所包含的软件工具会同时被安装到系统中,在系统中可以直接使用。这些命令工具的作用分别如下所示。

  • redis-server:用于启动Redis的工具
  • redis-benchmark:用于检测Redis在本机的运行效率
  • redis-check-aof :修复AOF持久化文件
  • redis-check-rdb : 修复RDB持久化文件
  • redis-cli :Redis 命令行工具

这次我们只使用redis-cli,redis-benchmark命令工具的使用

3.1 redis-cli 命令行工具

Redis 数据库系统也是一个典型的 C/S(客户端/服务器端)架构的应用,要访问 Redis 数据库需要使用专门的客户端软件。Redis 服务的客户端软件就是其自带的 redis-cli 命令行工具。使用 redis-cli 连接指定数据库,连接成功后会进入提示符为“远程主机 IP 地址:端口号>”的数据库操作环境,例如“127.0.0.1:6379>”。用户可以输入各种操作语句对数据库进行管理。如执行ping 命令可以检测 Redis 服务是否启动。

[root@localhost utils]# redis-cli  ###连接本机redis数据库
127.0.0.1:6379> ping     ###检测redis 服务是否启动
PONG
127.0.0.1:6379> 

在进行数据库连接操作时,可以通过选项来指定远程主机上的Redis 数据库。命令语法为 redis-cli -h host -p port -a password,其中-h 指定远程主机、-p 指定 Redis 服务的端口号、-a 指定密码。若不添加任何选项表示,连接本机上的 Redis 数据库;若未设置数据库密码可以省略-a 选项。例如执行以下命令可连接到主机为 192.168.10.161,端口为 6379 的 Redis 数据库,并査看 Redis 服务的统计信息。若要退出数据库操作环境,执行“exit”或“quit”命令即可返还原来的 Shell 环境。

[root@localhost utils]# redis-cli -h 192.168.10.101 -p 6379

在数据库操作环境中,使用help命令可以获取命令类型的帮助。有三种获取命令帮助的方式。

  • help @: 获取中命令列表
  • help @:获取某个命令的帮助
  • help @:获取可能帮助的主题列表

操作如下

[root@localhost utils]# redis-cli
127.0.0.1:6379> help @list

  BLPOP key [key ...] timeout
  summary: Remove and get the first element in a list, or block until one is available
  since: 2.0.0

  BRPOP key [key ...] timeout
  summary: Remove and get the last element in a list, or block until one is available
  since: 2.0.0

  BRPOPLPUSH source destination timeout
  summary: Pop a value from a list, push it to another list and return it; or block until one is available
  since: 2.2.0
###//省略部分内容

3.2 redis-benchmark 测试工具

redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试Redis 服务的性能。基本的测试语法为 redis-benchmark [option][optionvalue]。常用选项如下所示。

  • -h:指定服务器主机名
  • -p:指定服务器主机名
  • -s:指定服务器socket
  • -c:指定并发连接数
  • -n:指定请求数
  • -d:以字节的形式指定SET/GET值的数据大小
  • -k:1=keep alive 0=reconnect
  • -r:SET/GET/INCR 使用随机key,SADD使用随机值
  • -q:强制退出redis。仅显示query/sec值
  • -p:通过管道传输请求
  • –csv:以CSV格式输出
  • -l:生成循环,永久执行测试
  • -t:仅运行以逗号分割的测试命令列表
  • -I:IDle模式。仅打开N个idle连接等待

结合上述选项,可以针对某台Redis服务器进行性能检测,如执行redis-benchmark -h 192.168.10.161-p 6379-c 100-n 100000 命令即可向 IP地址为 192.168.10.161、端口为6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能。

[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -c 1000 -n 100  
====== PING_INLINE ======
  100 requests completed in 0.01 seconds
  1000 parallel clients
  3 bytes payload
  keep alive: 1

1.00% <= 7 milliseconds
25.00% <= 8 milliseconds
///省略

执行 redis-benchmark-h 192.168.10.161-p6379-g-d 100 命令的作用是测试存取大小为 100 字节的数据包的性能。

[root@localhost ~]# redis-benchmark -h 192.168.10.101 -p 6379 -q -d 1000
PING_INLINE: 209643.61 requests per second
PING_BULK: 215982.72 requests per second
SET: 178890.88 requests per second
GET: 205761.31 requests per second
INCR: 219780.22 requests per second
///省略

Redis数据库常用命令

一、基础操作示例

1. 连接测试与键管理
# 测试连接
PING  # 返回 PONG

# 设置键值并检查存在性
SET name "豆包"
EXISTS name  # 返回 1(存在)
EXISTS age   # 返回 0(不存在)

# 设置过期时间
SET temp_key "临时值"
EXPIRE temp_key 10  # 10秒后过期
TTL temp_key       # 返回剩余秒数(如9、8...)

# 删除键
DEL name  # 返回 1(删除成功)
GET name  # 返回 nil(已删除)
2. 数据库切换与清空
SELECT 1         # 切换到数据库1
SET db1_key "值"
DBSIZE           # 返回 1(当前库有1个键)
FLUSHDB          # 清空当前库
DBSIZE           # 返回 0
FLUSHALL         # 清空所有库

二、字符串操作示例

1. 基本操作
# 设置与获取
SET counter 100
GET counter  # 返回 "100"

# 批量操作
MSET user:1:name "张三" user:1:age 20
MGET user:1:name user:1:age  # 返回 ["张三", "20"]

# 数值增减
INCR counter       # 返回 101
INCRBY counter 5   # 返回 106
DECR counter       # 返回 105
2. 应用场景:计数器与缓存
# 记录页面访问量
INCR page:home:views  # 每次访问自增1

# 缓存用户信息(30分钟过期)
SET user:info:123 '{"name":"李四","age":25}' EX 1800

三、哈希操作示例

1. 对象存储
# 存储用户信息
HSET user:100 name "王五"
HSET user:100 age 30
HSET user:100 gender "男"

# 获取单个字段
HGET user:100 name  # 返回 "王五"

# 获取所有字段
HGETALL user:100
# 返回:
# 1) "name"
# 2) "王五"
# 3) "age"
# 4) "30"
# 5) "gender"
# 6) "男"
2. 批量操作
# 批量设置
HMSET product:1 name "手机" price 3999 stock 100

# 获取所有字段名/值
HKEYS product:1   # 返回 ["name", "price", "stock"]
HVALS product:1   # 返回 ["手机", "3999", "100"]

四、列表操作示例

1. 消息队列(FIFO)
# 生产者入队
RPUSH msg_queue "消息1"
RPUSH msg_queue "消息2"
RPUSH msg_queue "消息3"

# 消费者出队
LPOP msg_queue  # 返回 "消息1"
LPOP msg_queue  # 返回 "消息2"
2. 栈结构(LIFO)
LPUSH undo_stack "操作1"
LPUSH undo_stack "操作2"
LPOP undo_stack  # 返回 "操作2"(后进先出)
3. 固定长度列表(保留最近 10 条日志)
LPUSH logs "日志1"
LPUSH logs "日志2"
LTRIM logs 0 9  # 只保留前10条

五、集合操作示例

1. 去重与统计
# 记录访问用户(自动去重)
SADD visitors:20230624 "user1"
SADD visitors:20230624 "user2"
SADD visitors:20230624 "user1"  # 重复添加无效

SCARD visitors:20230624  # 返回 2(用户数)
SMEMBERS visitors:20230624  # 返回 ["user1", "user2"]
2. 交集、并集、差集
# 用户标签
SADD user:1:tags "技术" "编程" "阅读"
SADD user:2:tags "技术" "运动" "音乐"

# 共同标签(交集)
SINTER user:1:tags user:2:tags  # 返回 ["技术"]

# 所有标签(并集)
SUNION user:1:tags user:2:tags  # 返回 ["技术", "编程", "阅读", "运动", "音乐"]

六、有序集合操作示例

1. 排行榜
# 记录用户分数
ZADD leaderboard 100 "用户A"
ZADD leaderboard 200 "用户B"
ZADD leaderboard 150 "用户C"

# 获取前三名(分数从高到低)
ZREVRANGE leaderboard 0 2 WITHSCORES
# 返回:
# 1) "用户B"
# 2) "200"
# 3) "用户C"
# 4) "150"
# 5) "用户A"
# 6) "100"

# 获取用户C的排名
ZREVRANK leaderboard "用户C"  # 返回 1(第2名,索引从0开始)
2. 热门文章(按访问时间排序)
# 记录文章访问时间(时间戳作为分数)
ZADD article:views 1687600000 "article1"
ZADD article:views 1687601000 "article2"  # 最新访问

# 获取最近3篇文章
ZREVRANGE article:views 0 2
# 返回: ["article2", "article1"]

七、复杂场景示例

1. 缓存与过期策略
# 设置缓存(60秒过期)
SET cache:data '{"key":"value"}' EX 60

# 获取缓存,若不存在则重新生成
GET cache:data
# 若返回 nil,则重新计算数据并 SET
2. 分布式锁
# 获取锁(原子操作)
SET lock:resource "locked" NX PX 10000
# NX: 仅当键不存在时设置
# PX: 过期时间(毫秒)

# 释放锁
DEL lock:resource

八、批量操作(Pipeline)

# 普通操作(多次网络往返)
SET key1 "value1"
SET key2 "value2"
GET key1
GET key2

# Pipeline(一次往返)
MULTI
SET key1 "value1"
SET key2 "value2"
GET key1
GET key2
EXEC

九、持久化操作

# 手动触发RDB快照
SAVE  # 阻塞服务器
BGSAVE  # 后台异步执行

# AOF重写
BGREWRITEAOF

你可能感兴趣的:(sql,redis,数据库)