Redis 是一个高性能的开源内存数据结构存储系统,常用于缓存、消息队列和实时数据处理。以下是一个简明 Redis 教程,涵盖基础概念、安装和常用命令,适合初学者快速上手。


1. Redis 简介

  • 全称: Remote Dictionary Server
  • 特点:
  • 键值对存储(Key-Value Store)
  • 数据存储在内存中,速度极快
  • 支持多种数据结构:字符串、哈希、列表、集合、有序集合等
  • 支持持久化(RDB 和 AOF)、主从复制、分布式集群
  • 用途:
  • 缓存(如加速 Web 应用)
  • 会话存储
  • 排行榜
  • 发布/订阅消息系统

2. 安装 Redis

Linux(Ubuntu 示例)

  1. 更新包索引:
   sudo apt update
  1. 安装 Redis:
   sudo apt install redis-server
  1. 启动 Redis 服务:
   sudo systemctl start redis
  1. 检查 Redis 是否运行:
   redis-cli ping

输出 PONG 表示成功。

Windows

  • Redis 官方不支持 Windows,但可以使用 WSL 或从 GitHub 下载非官方版本(如 Microsoft 的 Redis 移植)。
  • 推荐使用 Docker:
  docker run -d -p 6379:6379 redis

MacOS

使用 Homebrew:

brew install redis
brew services start redis

3. 连接 Redis

  1. 使用命令行工具 redis-cli
   redis-cli
  1. 测试连接:
   127.0.0.1:6379> ping
   PONG

4. 常用数据结构和命令

Redis 支持多种数据结构,以下是常用命令示例:

4.1 字符串(String)

存储简单的键值对,适合缓存或计数器。

  • 设置键值:
  SET key value

示例:

  SET name "Alice"
  • 获取值:
  GET key

示例:

  GET name
  # 输出: "Alice"
  • 自增(用于计数器):
  INCR counter

4.2 哈希(Hash)

存储对象的字段和值,适合表示结构化数据。

  • 设置字段:
  HSET user:1 name "Bob" age 25
  • 获取字段:
  HGET user:1 name
  # 输出: "Bob"
  • 获取所有字段:
  HGETALL user:1

4.3 列表(List)

有序的字符串列表,适合队列或栈。

  • 左推入:
  LPUSH queue "task1"
  • 右弹出:
  RPOP queue
  • 查看列表:
  LRANGE queue 0 -1

4.4 集合(Set)

无序、不重复的字符串集合,适合去重或关系运算。

  • 添加元素:
  SADD myset "apple" "banana"
  • 查看成员:
  SMEMBERS myset
  • 交集:
  SINTER set1 set2

4.5 有序集合(Sorted Set)

带分数的集合,适合排行榜。

  • 添加元素:
  ZADD leaderboard 100 "Alice" 200 "Bob"
  • 获取排名:
  ZRANGE leaderboard 0 -1 WITHSCORES

5. 持久化

Redis 支持两种持久化方式:

  • RDB(快照):定期保存数据到磁盘,适合备份。
  SAVE  # 手动触发快照
  • AOF(追加文件):记录每个写操作,数据恢复更完整。
    启用 AOF:
  CONFIG SET appendonly yes

配置文件:/etc/redis/redis.conf(Linux)。


6. 发布/订阅

Redis 支持简单的消息系统。

  • 订阅频道:
  SUBSCRIBE channel1
  • 发布消息:
  PUBLISH channel1 "Hello, subscribers!"

7. 客户端库

在项目中使用 Redis,推荐以下库:

  • Python: redis-py
  pip install redis

示例:

  import redis
  r = redis.Redis(host='localhost', port=6379)
  r.set('key', 'value')
  print(r.get('key'))  # b'value'
  • Node.js: ioredis
  • Java: JedisLettuce

8. 性能优化

  • 内存管理:设置 maxmemory 限制,避免占用过多内存。
  • 键设计:使用命名空间(如 user:123:info)提高可读性。
  • 管道(Pipeline):批量发送命令,减少网络开销。
    示例(Python):
  with r.pipeline() as pipe:
      pipe.set('key1', 'value1')
      pipe.set('key2', 'value2')
      pipe.execute()

9. 常见问题

  • 连接失败:检查防火墙或 bind 配置(默认只允许 127.0.0.1)。
  • 数据丢失:确保启用持久化或检查内存淘汰策略。
  • 性能瓶颈:使用 INFO 命令监控内存和命令延迟。

10. 进阶学习

  • 集群:学习 Redis Cluster 实现分布式存储。
  • Lua 脚本:用 Lua 扩展 Redis 功能。
  • Redis Sentinel:实现高可用性。
  • 官方文档:https://redis.io/documentation
  • 中文资源:https://www.redis.cn/

示例场景:简单缓存

# 设置缓存,带 60 秒过期时间
SETEX page:home 60 "{\"title\": \"Home Page\"}"

# 获取缓存
GET page:home

如果需要更详细的某部分(如特定数据结构、集群配置或代码示例),请告诉我!