【docker基础】Redis的docker部署

一、什么是 Redis

Redis (Remote Dictionary Server)是一个开源的内存数据结构存储系统,可以用作数据库、缓存、消息代理和队列。

二、Redis 的特点

2.1 内存存储

  • 数据主要存储在内存中,读写速度极快
  • 支持数据持久化到磁盘(可选)

2.2 键值存储

  • Redis 是一个键值对数据库
  • 键(Key)是字符串类型
  • 值(Value)支持多种数据结构

2.3 支持多种数据结构

数据结构 说明 应用场景
String 字符串 缓存、计数器
Hash 哈希表 用户信息、配置
List 列表 消息队列、最新动态
Set 无序集合 去重、好友推荐
Sorted Set 有序集合 排行榜
Pub/Sub 发布订阅 实时消息

2.4 性能优势

  • 读写速度:10万+次/秒
  • 低延迟:亚毫秒级响应
  • 高并发:支持大量并发连接

2.5 Redis 不擅长的领域

  • 大规模持久化存储 :历史数据归档
  • 复杂事务处理 :金融交易系统
  • 复杂查询分析 :报表生成、数据分析
  • 强一致性要求 :银行转账、订单系统
  • 关系型数据 :多表关联查询

三、Redis 的常见用途

3.1 缓存

复制代码
用户请求 → Redis缓存 → 命中返回
         ↓ (未命中)
         → 数据库 → 写入缓存 → 返回

3.2 会话存储

复制代码
用户登录 → Redis存储Session → 请求验证Session

3.3 消息队列

复制代码
生产者 → Redis List → 消费者

3.4 排行榜

复制代码
用户得分 → Redis Sorted Set → 获取排名

四、Redis 与 Docker

4.1 运行 Redis 容器

复制代码
docker run -d --name myredis -p 6379:6379 redis:6

命令解释:

  • -d:后台运行
  • --name myredis:容器名称
  • -p 6379:6379:端口映射(6379是Redis默认端口)
  • redis:6:使用Redis 6版本镜像

4.2 带持久化的 Redis

复制代码
docker run -d --name myredis -p 6379:6379 \
  -v ~/redis/data:/data \
  redis:6 redis-server --appendonly yes

命令解释:

  • -v ~/redis/data:/data:数据卷挂载(持久化)
  • redis-server --appendonly yes:启用AOF持久化

4.3 进入 Redis 命令行

复制代码
docker exec -it myredis redis-cli

五、Redis 基本命令

5.1 String 类型操作

复制代码
# 设置值
SET name "张三"

# 获取值  
GET name

# 自增
INCR counter

# 设置过期时间(60秒)
SET token "abc123" EX 60

5.2 Hash 类型操作

复制代码
# 设置哈希字段
HSET user:1 name "张三" age 25 email "zhangsan@example.com"

# 获取哈希字段
HGET user:1 name

# 获取所有字段
HGETALL user:1

5.3 List 类型操作

复制代码
# 左推入队
LPUSH queue "task1"
LPUSH queue "task2"

# 右推出队
RPOP queue

# 获取列表长度
LLEN queue

5.4 Set 类型操作

复制代码
# 添加元素
SADD users "张三" "李四" "王五"

# 查看元素
SMEMBERS users

# 判断元素是否存在
SISMEMBER users "张三"

5.5 Sorted Set 类型操作

复制代码
# 添加元素(带分数)
ZADD ranking 100 "张三" 95 "李四" 90 "王五"

# 获取排名(从高到低)
ZRANGE ranking 0 -1 WITHSCORES

# 获取某人的分数
ZSCORE ranking "张三"

六、Docker Compose 中的 Redis

配置示例

复制代码
version: '3.8'

services:
  redis:
    image: redis:6
    container_name: myredis
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    command: redis-server --appendonly yes
    restart: always

volumes:
  redis_data:

应用连接 Redis

Python 示例:

复制代码
import redis

# 连接 Redis
r = redis.Redis(host='redis', port=6379, decode_responses=True)

# 设置缓存
r.set('cache:users', '[{"id": 1, "name": "张三"}]', ex=60)

# 获取缓存
users = r.get('cache:users')

七、Redis 持久化策略

7.1 RDB(快照)

  • 定期将内存数据快照保存到磁盘
  • 适合备份和灾难恢复
  • 可能丢失最后一次快照后的修改

7.2 AOF(追加日志)

  • 记录每次写操作到日志文件
  • 重启时重新执行日志恢复数据
  • 数据完整性更好

7.3 混合模式

  • 同时使用 RDB 和 AOF
  • 兼顾性能和数据安全

八、总结

特性 说明
类型 内存键值存储
速度 极高(10万+次/秒)
数据结构 String、Hash、List、Set、Sorted Set
持久化 RDB、AOF、混合模式
用途 缓存、会话存储、消息队列、排行榜

Redis 是现代 Web 应用中不可或缺的组件,尤其在需要高并发、低延迟的场景下表现出色!

相关推荐
闪电悠米1 小时前
黑马点评-Redis 消息队列-04_stream_seckill_order
数据库·redis·分布式·缓存·oracle·junit·lua
成为你的宁宁2 小时前
【基于 Prometheus Operator 实现 K8s 环境下 Redis Cluster 集群监控部署】
redis·kubernetes·prometheus
bmjIjFNC82 小时前
Redis分布式锁进第九十一篇
数据库·redis·分布式
维尔康2 小时前
【无标题】
redis
是一个Bug2 小时前
Docker 与 Kubernetes:从“集装箱”到“远洋舰队”
docker·容器·kubernetes
java_cj2 小时前
阅读 k8s 源码的准备工作
云原生·容器·kubernetes
AOwhisky2 小时前
Redis 学习笔记(第二期):核心数据类型与消息队列实战
运维·数据库·redis·笔记·学习·云计算
呦呦鹿鸣Rzh2 小时前
Redis Lua 脚本:从入门到避坑指南
redis·junit·lua
Harvy_没救了3 小时前
【云计算】华为公有云构建高可用Redis集群
数据库·redis·云计算