Redis 概述

Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,支持多种数据结构。它通常用作数据库、缓存和消息中间件。Redis 以其高性能、低延迟和丰富的功能集著称,广泛应用于高并发场景。

Redis 核心特性

内存存储
Redis 数据主要存储在内存中,读写速度极快,适合高性能需求场景。支持持久化机制,可将数据保存到磁盘。

丰富的数据结构
支持字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)、位图(Bitmap)等数据结构。

持久化支持
提供 RDB(快照)和 AOF(追加日志)两种持久化方式,确保数据安全。

高可用与分布式
支持主从复制、哨兵模式(Sentinel)和集群模式(Cluster),实现高可用和横向扩展。

Redis 数据结构详解

字符串(String)

最基本的键值类型,值可以是字符串、整数或浮点数。支持原子操作如递增(INCR)、追加(APPEND)。

SET key value
GET key
INCR key

哈希(Hash)

键值对的集合,适合存储对象。支持字段级别的操作。

HSET user:1 name "Alice" age 30
HGET user:1 name

列表(List)

按插入顺序排序的字符串列表,支持双向操作(LPUSH/RPUSH)。

LPUSH tasks "task1"
RPOP tasks

集合(Set)

无序且唯一的字符串集合,支持交集、并集等操作。

SADD tags "redis" "database"
SINTER tags1 tags2

有序集合(Sorted Set)

每个成员关联一个分数(score),按分数排序。适合排行榜场景。

ZADD leaderboard 100 "Alice"
ZRANGE leaderboard 0 -1 WITHSCORES

Redis 持久化机制

RDB(快照)
定时生成数据快照并保存到磁盘。适合备份和恢复,但可能丢失最后一次快照后的数据。

AOF(追加日志)
记录所有写操作命令,重启时重新执行。数据安全性更高,但文件体积较大。

# 配置 RDB
save 900 1  # 900秒内至少1次修改触发保存

# 配置 AOF
appendonly yes
appendfsync everysec

Redis 高可用方案

主从复制
主节点(Master)异步复制数据到从节点(Slave),实现读写分离和数据冗余。

哨兵模式(Sentinel)
监控主从节点状态,自动故障转移。需至少部署 3 个哨兵实例。

集群模式(Cluster)
数据分片(16384 个槽)存储到多个节点,支持横向扩展和自动故障转移。

# 启动集群节点
redis-server --cluster-enabled yes --cluster-config-file nodes.conf

Redis 性能优化

合理使用数据结构
根据场景选择最优数据结构。例如,频繁查询字段用 Hash,排行榜用 Sorted Set。

批量操作
使用管道(Pipeline)或批量命令(MSET、HMSET)减少网络开销。

内存优化
配置最大内存限制(maxmemory),启用淘汰策略(如 volatile-lru)。

# 管道示例
cat commands.txt | redis-cli --pipe

Redis 应用场景

  1. 缓存:加速数据访问,减轻数据库压力。
  2. 会话存储:存储用户会话信息,支持分布式系统。
  3. 排行榜:利用 Sorted Set 实现实时排名。
  4. 消息队列:使用 List 或 Stream 实现轻量级队列。

Redis 安全配置

  • 设置密码(requirepass)。
  • 限制绑定 IP(bind)。
  • 禁用高危命令(如 FLUSHALL)。
# 安全配置示例
requirepass yourpassword
rename-command FLUSHALL ""

Redis 常见问题

缓存雪崩
大量缓存同时失效,导致请求直接打到数据库。解决方案:设置随机过期时间,或使用熔断机制。

缓存穿透
查询不存在的数据,绕过缓存。解决方案:布隆过滤器(Bloom Filter)或缓存空值。

内存碎片
频繁增删数据可能导致内存碎片。解决方案:启用 activedefrag 或定期重启实例。

Redis 命令行工具

  • redis-cli:交互式命令行工具。
  • redis-benchmark:性能测试工具。
  • redis-check-aof:修复 AOF 文件。
# 性能测试示例
redis-benchmark -n 100000 -c 50

Redis 的基本使用

Redis 是一个开源的内存数据结构存储系统,常用作数据库、缓存和消息代理。以下是 Redis 的基本使用方法。

安装与启动

在 Linux 系统上,可以通过包管理器安装 Redis:

sudo apt update
sudo apt install redis-server

启动 Redis 服务:

sudo systemctl start redis-server

检查 Redis 服务状态:

sudo systemctl status redis-server

连接 Redis

使用 Redis 命令行工具 redis-cli 连接到本地 Redis 服务器:

redis-cli

如果需要连接到远程 Redis 服务器:

redis-cli -h <hostname> -p <port> -a <password>

基本命令

设置键值对:

SET key value

获取键值:

GET key

删除键:

DEL key

检查键是否存在:

EXISTS key

设置键的过期时间(秒):

EXPIRE key seconds

数据类型操作

Redis 支持多种数据类型,以下是常见操作示例。

字符串(String)
SET name "Redis"
GET name
列表(List)
LPUSH mylist "value1"
RPUSH mylist "value2"
LRANGE mylist 0 -1
集合(Set)
SADD myset "member1"
SMEMBERS myset
哈希(Hash)
HSET user:1 name "Alice" age 30
HGETALL user:1
有序集合(Sorted Set)
ZADD leaderboard 100 "player1"
ZRANGE leaderboard 0 -1 WITHSCORES

持久化配置

Redis 提供两种持久化方式:RDB 和 AOF。

启用 RDB 快照(默认):

save 900 1
save 300 10
save 60 10000

启用 AOF 持久化:

appendonly yes
appendfsync everysec

性能优化

限制内存使用:

maxmemory 2gb
maxmemory-policy allkeys-lru

禁用持久化(仅用于缓存):

save ""
appendonly no

安全配置

设置密码:

requirepass yourpassword

绑定特定 IP:

bind 127.0.0.1

集群部署

创建 Redis 集群需要至少 6 个节点(3 主 3 从)。使用 redis-cli 创建集群:

redis-cli --cluster create node1:port node2:port ... --cluster-replicas 1

监控与调试

查看 Redis 信息:

INFO

监控命令执行:

MONITOR

性能测试:

redis-benchmark -n 100000 -c 100

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐