Redis 介绍 Redis 本质上是一个Key / Value 数据库,是与 Memcached 类似的NoSQL数据库。相比 Memcached ,它支持数据持久化到磁盘,支持更多的数据类型(包括 String、List、Set、Hash、Zset),支持数据备份等多种特性在2014年之后取得了快速的发展。
Docker安装Redis 1. 获取Redis镜像 1 2 3 4 $ docker pull redis $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis 6.2.0 cc69ae189a1a 4 days ago 105MB
写文章时,最新的 redis 镜像版本为 6.2.0
2. 启动单个Redis服务 1 2 3 4 5 6 7 8 9 10 11 12 shiqiang@bogon redis % docker run --rm -p 6379:6379 --name redis -d redis redis-server --appendonly yes f22a08d103ad0908803da0ba4d58f08717d1e6c1f1064175c22324a274c6bb6b shiqiang@bogon redis % docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f22a08d103ad redis "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:6379->6379/tcp redis shiqiang@bogon redis % docker exec -it redis /bin/bash root@f22a08d103ad:/data 127.0.0.1:6379> set test 1 OK 127.0.0.1:6379> get test "1"
上面的代码首先创建了一个后台状态运行的reids服务,这个服务还不能用于生产环境,因为配置和数据都是在容器中,当容器重启之后,所有的信息都会丢失,尽可以作为测试学习使用。
随后我们又运行了容器中的 redis-cli
命令,验证了与服务端的连接。
如果使用本地的配置文件,则需要如下的命令。
1 $ docker run --rm -p 6379:6379 --name redis -d -v "$PWD /redis.conf" :/usr/local /etc/redis/redis.conf -v "$PWD /data" :/data redis redis-server /usr/local /etc/redis/redis.conf
配置文件的样例
1 2 3 4 5 dir /data logfile /data/redis.log protected-mode no appendonly yes
基于Docker快速构建Redis集群 首先来介绍主从模式的Redis集群,开始之前先做好准备,拉取 Redis 镜像文件,创建对应的配置文件。
1 2 3 4 5 6 7 8 9 10 11 12 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis 6.2.0 cc69ae189a1a 8 days ago 105MB $ ls -lha total 24 drwxr-xr-x 7 shiqiang staff 224B 3 3 13:15 . drwxr-xr-x 3 shiqiang staff 96B 3 3 14:25 .. drwxr-xr-x 2 shiqiang staff 64B 3 3 13:15 data-master drwxr-xr-x 2 shiqiang staff 64B 3 3 13:15 data-slave -rw-r--r-- 1 shiqiang staff 1.1K 3 3 17:25 docker-compose.yml -rw-r--r-- 1 shiqiang staff 92B 3 3 13:24 redis_master.conf -rw-r--r-- 1 shiqiang staff 118B 3 3 14:31 redis_slave.conf
配置文件的具体内容可以参考我的 Github 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # Redis-master dir /data logfile /data/redis-master.log protected-mode no appendonly yes bind 172.25.0.11 # Redis-slave dir /data logfile /data/redis-slave.log protected-mode no appendonly yes bind 172.25.0.12 slaveof 172.25.0.11 6379
看一下具体效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 $ docker-compose up Creating network "master-slave_redis-network" with driver "bridge" Creating master-slave_redis-slave_1 ... done Creating master-slave_redis-master_1 ... done Attaching to master-slave_redis-slave_1, master-slave_redis-master_1 docker exec -it 655b7f4e8f41 sh $ redis-cli -h 172.25.0.12 172.25.0.12:6379> set username wang (error) READONLY You can't write against a read only replica. 172.25.0.12:6379> get username "wang" 172.25.0.12:6379> get username "wang" # 再打开一个终端,进入 redis master 容器 $ docker exec -it 6a5c161840ee sh # redis-cli -h 172.25.0.11 172.25.0.11:6379> set username wang OK 172.25.0.11:6379> get username "wang"
参考资料
redis 和 memcached区别是什么?
Compose file version 2 reference