Redis 是一个开源的、可基于内存也可持久化存储的 Key-Value 存储 NoSQL 数据库。使用 ANSI C 语言编写。并提供多种语言的API。
安装 Redis
本文环境:
- Linux 发行版:Ubuntu Focal 20.04 (LTS)
- Docker version 20.10.11
- docker-compose version 1.29.2
Redis 官方 image 仓库地址:https://hub.docker.com/_/redis
拉取镜像:
docker pull redis:6.2.6
redis:6.2.6 image 基于 debian:bullseye-slim,压缩后大小 39.81 Mb,Dockerfile 链接地址:
redis/Dockerfile · docker-library/redis (github.com)
注:数据默认只写入内存,如需数据持久化可直接跳到“数据持久化”部分。
启动 redis 容器:
docker run --name redis626 \
-p 6379:6379 \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
-d redis:6.2.6
--name
,容器的名称,自定义。-p
,映射容器端口到宿主机端口。-v
,挂载宿主机目录到容器内,如宿主机目录不存在则创建。/etc/localtime
,让容器的时钟与宿主机同步,避免时区的问题,ro
是 read only 的意思,默认是rw
读写模式。
-d
,容器以守护进程方式运行。
查看容器状态:
docker ps -a
退出并删除容器:
docker stop redis626
docker rm redis626
数据持久化
参考:REDIS persistence – Redis中国用户组(CRUG)
设置数据持久化可以将数据写入硬盘,避免断电丢失。
下面将通过配置开启数据持久化的 AOF 模式,使用默认的每秒同步策略。
准备配置文件:
# 创建redis的数据存储和配置文件目录
mkdir -p redis626/{data,conf}
cd redis626
# 从官网下载配置文件到config目录
wget http://download.redis.io/redis-stable/redis.conf -P ./conf/
修改配置文件:
$ vim ./conf/redis.conf
# bind 127.0.0.1 # 注释掉,使redis可以远程访问
protected-mode no # 改为no,使redis可以远程访问,默认yes
requirepass 123456 # 设置你访问redis的密码
databases 16 # 数据库个数(可选),默认16
appendonly yes # 改为yes,数据持久化,AOF模式,默认是no
redis 配置参考:REDIS config – Redis中文资料站 – Redis中国用户组(CRUG)
启动 redis 容器并读取配置:
docker run --name redis626 \
-p 6379:6379 \
-v ${PWD}/conf/redis.conf:/etc/redis/redis.conf \
-v ${PWD}/data:/data \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
-d redis:6.2.6 redis-server /etc/redis/redis.conf
-v ${PWD}/conf/redis.conf
,挂载当前目录下的配置文件到容器中。-v ${PWD}/data
,挂载数据目录到容器中。
查看启动日志:
docker logs redis626
小提示:生产环境推荐使用 Master-slave 主从同步,并在 master 禁用数据持久化,在 slave 上配置数据持久化。
测试 Redis
# redis626是前面定义的容器名,redic-cli是客户端连接工具
$ docker exec -it redis626 redis-cli
# 使用设置的密码验证身份
127.0.0.1:6379> auth 123456
# 写入数据
127.0.0.1:6379> set name 123
OK
127.0.0.1:6379> get name
"123"
127.0.0.1:6379> exit
如果开启了 AOF,会在 data 目录下看到一个数据文件 appendonly.aof。
容器编排
创建 docker-compose.yml
version: "3.1"
services:
redis:
image: redis:6.2.6
container_name: redis626
restart: always
volumes:
- "${PWD}/conf/redis.conf:/etc/redis/redis.conf"
- "${PWD}/data:/data"
- "/etc/timezone:/etc/timezone:ro"
- "/etc/localtime:/etc/localtime:ro"
ports:
- "6379:6379"
command: redis-server /etc/redis/redis.conf
检查模板文件:
docker-compose config
启动容器:
docker-compose up -d
-d
:后台启动。
查看状态:
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------
redis626 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
关闭容器:
docker-compose down
客户端工具
AnotherRedisDesktopManage
- 一个开源免费的 redis 客户端。
- Github: qishibo/AnotherRedisDesktopManager: 🚀🚀🚀A faster, better and more stable redis desktop manager [GUI client], compatible with Linux, Windows, Mac. What’s more, it won’t crash when loading massive keys. (github.com)
- Gitee:AnotherRedisDesktopManager: Github国内镜像,供下载使用 (gitee.com)