以下是基于 Docker 安装 Redis 的完整步骤,整合自多个可信度较高的来源:
一、拉取 Redis 镜像
docker pull redis:latest # 拉取最新版本
# 或指定版本,如:docker pull redis:7.0.12
💡 提示:建议使用官方镜像并指定稳定版本号以保障兼容性。
二、准备配置文件与目录
- 创建本地目录(Linux/macOS):
mkdir -p /opt/docker/redis/{conf,data} # 配置文件与数据存储目录
- 下载并修改配置文件:
wget -O /opt/docker/redis/conf/redis.conf \ https://raw.githubusercontent.com/redis/redis/7.0/redis.conf # 获取官方模板
- 关键配置项修改(编辑
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
。
四、验证与连接
- 检查容器状态:
docker ps -f name=redis-server # 查看运行状态
- 命令行连接测试:
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>
关键注意事项:
- 使用 try-with-resources 确保连接关闭
- 生产环境建议使用连接池
- 所有写操作建议检查返回值
- 注意序列化/反序列化处理(推荐JSON)
需要完整可运行示例项目时,可告知具体应用场景(如电商/社交等),我可提供针对性实现方案。