一、docker-compose.yml

version: '3.8'

services:
  redis:
    image: redis:8.2
    container_name: redis-server
    ports:
      - "6379:6379"
      - "6380:6380"  # 如果需要额外端口,比如用于集群
    volumes:
      - ./data:/data
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    environment:
      - TZ=Asia/Shanghai
      - REDIS_PASSWORD=${REDIS_PASSWORD} # 实际使用时请设置强密码
    command: redis-server /usr/local/etc/redis/redis.conf
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
      interval: 10s
      timeout: 5s
      retries: 3
    restart: unless-stopped
    networks:
      - redis-net
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

networks:
  redis-net:
    driver: bridge

二、redis.conf

# 持久化配置
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data

# 网络配置
bind 0.0.0.0
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300

# 安全设置
requirepass ${REDIS_PASSWORD}
maxclients 10000
maxmemory 2gb
maxmemory-policy allkeys-lru

# 日志配置
loglevel notice
logfile "/data/redis.log"

三、设置环境变量(可选,推荐使用.env文件)

echo "REDIS_PASSWORD=your_strong_password_here" > .env

四、验证服务

docker exec -it redis-server sh
cat /usr/local/etc/redis/redis.conf | grep requirepass
docker compose exec redis redis-cli -a your_strong_password_here ping
# 正确的连接方式(使用您设置的密码)
docker compose exec redis redis-cli -a (auth_password) ping

# 或者不使用-a参数,连接后使用AUTH命令
docker compose exec redis redis-cli
127.0.0.1:6379> auth redis密码
OK
127.0.0.1:6379> ping
PONG