Redis 是一个开源的内存数据结构存储系统,广泛用于缓存、消息队列和实时数据处理等场景。使用 Docker 部署 Redis 不仅可以简化安装过程,还能提高管理的灵活性。下面我们将详细介绍如何使用 Docker 安装 Redis。
前提条件
在开始之前,请确保你已经在你的系统中安装了 Docker。关于Liunx安装Docker,请参考:Linux安装Docker
1.安装Redis
1.1.拉取Redis镜像
首先,你需要从 Docker Hub 拉取 Redis 镜像。打开终端并输入以下命令:
# 此命令会拉取 Docker Hub 上最新版本的Redis
$ docker pull redis
1.2.查看Redis镜像
打开终端并输入以下命令:
$ docker images
可见,我们已经安装了最新版本的 Redis:
1.3.运行Redis容器
镜像下载完成后,你可以使用以下命令启动一个 Redis 容器:
# 将 docker 容器的 6379 端口映射到宿主机的 63079 端口上
$ docker run -itd --name redis -p 63079:6379 redis
1.4.检查Redis的运行状态
在终端上直接运行以下代码,来查看 Redis 容器的运行状态:
$ docker ps
2.配置Redis
我们在安装完成 Redis 后,可能所需的配置并不是我们理想中的配置,这个时候我们就需要进行 Redis 配置文件的修改
2.1.进入到Redis容器
首先,我们进入到对应的 Redis 容器:
# 这里的 redis 是对应的容器名称,也可以换成对应的容器ID
$ docker exec -it redis /bin/bash
# 如果有些服务器没有安装bash,也可以用下面这行代码
$ docker exec -it redis /bin/bash
2.2.找到redis.conf配置文件
$ vim /etc/redis/redis.conf
# 或者
$ vi /etc/redis/redis.conf
这个地方,如果 Redis 容器中没有预装 vi/vim 编辑器,可以考虑使用 nano 编辑器,或者安装 vi/vim 编辑器:
$ apt-get update $ apt-get install vim
2.3. 修改redis.conf配置文件
protected-mode no
port 6379
tcp-backlog 511
requirepass ${YOUR_PASSWD}
timeout 0
tcp-keepalive 60 # 默认值是300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompress yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priorit 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-kespace-enents ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-zpilist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
说明:
- 这里 timeout 0 是设置Redis的空闲连接超时时间,0 表示禁用超时,即客户端连接不会因为闲置时间而自动断开。这意味着 Redis 将始终保持与客户端的连接,直到客户端主动断开连接;
- tcp-keepalive 配置项用于设置 TCP 连接的保活时间,单位是秒。 tcp-keepalive
60
表示 Redis 将每 60 秒向客户端发送一个 TCP 保活探测包,以检查客户端连接是否仍然有效。这有助于发现并清理已经断开的连接,避免长时间占用资源的“僵尸”连接。
【博主的项目在引入Redis后,也是出现了周期性无法连接 Redis 或 连接 Redis 超时的情况,最终在查阅许多资料后,发现是TCP机制的问题,于是对症下药,修改了Redis配置文件中TCP连接的保活时间,最终得以解决这个问题。】
2.4.重启Redis容器
$ docker restart redis
通过以下命令查看 Redis 是否成功正常运行:
$ docker logs redis