Docker 安装 Redis

发布于:2025-08-10 ⋅ 阅读:(18) ⋅ 点赞:(0)

以下是基于 Docker 安装 Redis 的完整步骤,整合自多个可信度较高的来源:

一、拉取 Redis 镜像

docker pull redis:latest  # 拉取最新版本
# 或指定版本,如:docker pull redis:7.0.12

💡 提示:建议使用官方镜像并指定稳定版本号以保障兼容性。


二、准备配置文件与目录

  1. 创建本地目录(Linux/macOS):
    mkdir -p /opt/docker/redis/{conf,data}  # 配置文件与数据存储目录
    
  2. 下载并修改配置文件
    wget -O /opt/docker/redis/conf/redis.conf \
         https://raw.githubusercontent.com/redis/redis/7.0/redis.conf  # 获取官方模板
    
  3. 关键配置项修改(编辑 redis.conf):
    bind 0.0.0.0              # 允许所有 IP 访问
    protected-mode no         # 关闭保护模式(需配合密码使用)
    requirepass yourpassword  # 设置访问密码(替换 yourpassword)
    appendonly yes            # 启用 AOF 持久化
    dir /data                 # 容器内数据存储路径(需与挂载目录对应)
    daemonize no              # Docker 中必须设为 no
    

三、启动 Redis 容器

docker run -d --name redis-server \
  -p 6379:6379 \  # 宿主机端口:容器端口
  -v /opt/docker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \  # 挂载配置文件
  -v /opt/docker/redis/data:/data \  # 挂载数据目录(持久化存储)
  --restart always \  # 容器退出时自动重启
  redis:latest \
  redis-server /usr/local/etc/redis/redis.conf  # 指定配置文件启动

Windows 路径注意
若在 Windows 使用 Docker Desktop,需将路径如 C:\RedisConfig 转换为 /c/RedisConfig


四、验证与连接

  1. 检查容器状态
    docker ps -f name=redis-server  # 查看运行状态
    
  2. 命令行连接测试
    docker exec -it redis-server redis-cli
    127.0.0.1:6379> AUTH yourpassword  # 认证密码
    127.0.0.1:6379> SET test "OK"      # 测试写入
    

关键配置说明

配置项 作用 必要性
requirepass 设置客户端连接密码 生产环境必选
appendonly yes 启用 AOF 持久化(避免数据丢失) 推荐启用
dir /data 指定容器内数据存储目录 需与挂载目录匹配
protected-mode no 关闭保护模式(允许远程连接) 依赖网络访问时必选

🔒 安全建议
若需公网访问,应通过防火墙限制 IP 或启用 Redis ACL 功能。

引用链接:
1.5分钟教你docker安装启动redis全教程(全新方式) - 简书社区
2.Quick starts - Redis官网
3.docker安装redis - CSDN博客
4.Docker安装Redis - 博客园
5.在Windows 上使用 Docker Desktop 通过配置文件启动 Redis 容器 - 神龙大侠阿宝
6.在Centos Stream 9上Docker的实操教程(五)- Dockerfile详解 - Micro麦可乐
7.使用Docker 安装 Redis 的完整指南 - CSDN博客
8.Linux使用Docker部署安装应用 - CSDN博客
9.018-docker方式安装redis软件 - 哔哩哔哩
10.【尚学堂】四分钟教会你用docker安装redis; - 哔哩哔哩
11.基于Docker环境快速安装使用Redis6 - 知乎
12.40Docker安装和部署容器化Redis - 哔哩哔哩
13.MacOS安装Redis完全指南 - Homebrew与Docker两种方式详解 - 哔哩哔哩
14.Docker学习实践-如何在线或离线安装Redis Docker镜像 - 哔哩哔哩
15.云服务器java环境搭建一条龙(7)—— docker安装redis - 哔哩哔哩
16.【GeekHour】一小时Redis教程 - 哔哩哔哩
17.009-快速入门-微服务环境搭建-使用docker安装redis - 哔哩哔哩
18.使用Docker安装MySQL和Redis的详细步骤 - 哔哩哔哩
19.Install Redis Open Source - Redis官网
20.Accelerate how you build, share, and run applications - Docker官网


以下是 Redis 五种核心数据类型的典型应用场景及示例代码,结合生产环境常见需求整理:


1. String(字符串)

应用场景:缓存、计数器、分布式锁
示例

# 缓存用户信息(JSON格式)
SET user:1001 '{"name":"Alice","age":30}' EX 3600  # 缓存1小时

# 实现分布式锁(SETNX + EXPIRE)
SETNX lock:order_123 1  # 获取锁(非阻塞)
EXPIRE lock:order_123 10  # 设置10秒过期

# 计数器(原子递增)
INCR page_views:home  # 主页访问量+1

2. Hash(哈希)

应用场景:存储对象属性、购物车
示例

# 存储用户属性(避免频繁全量更新)
HSET user:1001 name "Bob" age 25 email "bob@example.com"

# 查询部分字段(节省带宽)
HGET user:1001 name  # 返回 "Bob"

# 购物车商品
HMSET cart:user_456 item1_sku "123" item1_qty 2
HINCRBY cart:user_456 item1_qty 1  # 商品数量+1

3. List(列表)

应用场景:消息队列、最新消息列表
示例

# 简单消息队列(LPUSH + RPOP)
LPUSH my_queue "task1"  # 生产者入队
RPOP my_queue           # 消费者出队

# 朋友圈时间线(LPUSH + LRANGE)
LPUSH timeline:1001 "post1"  # 用户发帖
LRANGE timeline:1001 0 9     # 获取最近的10条

4. Set(集合)

应用场景:标签系统、去重
示例

# 用户兴趣标签
SADD user:1001:tags "music" "travel" "photography"

# 共同兴趣(交集)
SINTER user:1001:tags user:1002:tags  # 返回 "music"

# 防止重复提交
SADD submissions:today "user_123"  # 记录已提交用户

5. Sorted Set(有序集合)

应用场景:排行榜、延时任务
示例

# 游戏排行榜(分数越高排名越前)
ZADD leaderboard 5000 "player1" 3000 "player2" 2000 "player3"
ZREVRANGE leaderboard 0 2 WITHSCORES  # 返回前3名

# 延时任务队列(时间戳为分数)
ZADD delayed_jobs 1712345678 "task1"  # 1712345678秒后执行
ZRANGEBYSCORE delayed_jobs 0 1712345678  # 获取到期的任务

类型选择建议

数据类型 适用场景 时间复杂度
String 简单键值、计数器 O(1)
Hash 嵌套对象、部分更新 O(1)
List 消息队列、时间线 O(1)(头尾操作)
Set 去重、标签系统 O(1)(基础操作)
Sorted Set 排行榜、优先级队列 O(log(N))

性能提示
大对象(如超长字符串)建议拆分为Hash或使用外部存储,避免阻塞Redis。


以下是 Redis 五种数据类型的 Java 代码应用示例(使用 Jedis 客户端):

1. String 类型

// 缓存用户会话信息
jedis.setex("user:1001:session", 3600, "active"); // 设置1小时过期
String sessionStatus = jedis.get("user:1001:session");

// 原子计数器
jedis.incr("page:home:views"); // 访问量+1

2. Hash 类型

// 存储商品信息
Map<String, String> product = new HashMap<>();
product.put("name", "iPhone15");
product.put("price", "6999");
jedis.hset("product:1001", product);

// 获取部分字段
String price = jedis.hget("product:1001", "price");

3. List 类型

// 消息队列(生产者)
jedis.lpush("order:queue", "order1001");

// 消息队列(消费者)
String orderId = jedis.rpop("order:queue");

// 最新10条动态
jedis.lpush("user:1001:posts", "post1", "post2");
List<String> recentPosts = jedis.lrange("user:1001:posts", 0, 9);

4. Set 类型

// 用户标签系统
jedis.sadd("user:1001:tags", "tech", "sports");

// 共同好友计算
jedis.sinterstore("common:1001:1002", "user:1001:friends", "user:1002:friends");

// 内容去重
if(jedis.sadd("articles:20230808", "article123") == 1) {
    System.out.println("新文章入库");
}

5. Sorted Set 类型

// 游戏排行榜
jedis.zadd("game:leaderboard", 5000, "player1");
jedis.zadd("game:leaderboard", 3000, "player2");

// 获取TOP3
Set<Tuple> topPlayers = jedis.zrevrangeWithScores("game:leaderboard", 0, 2);

// 延时任务
long futureTime = System.currentTimeMillis()/1000 + 60;
jedis.zadd("delayed:tasks", futureTime, "task:clean_cache");

完整示例项目结构

若需要完整可运行项目,建议 Maven 配置:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.1</version>
</dependency>

关键注意事项:

  1. 使用 try-with-resources 确保连接关闭
  2. 生产环境建议使用连接池
  3. 所有写操作建议检查返回值
  4. 注意序列化/反序列化处理(推荐JSON)

需要完整可运行示例项目时,可告知具体应用场景(如电商/社交等),我可提供针对性实现方案。


网站公告

今日签到

点亮在社区的每一天
去签到