Docker 安装 Redis

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 的 NoSQL 数据库,并提供多种语言的 API。

1、查看可用的 Redis 版本

访问 Redis 镜像库地址: https://hub.docker.com/_/redis?tab=tags。

可以通过 Sort by 查看其他版本的 Redis,默认是最新版本 redis:latest

img

你也可以在下拉列表中找到其他你想要的版本:

img

此外,我们还可以用 docker search redis 命令来查看可用版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ docker search  redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source ... 2321 [OK]
sameersbn/redis 32 [OK]
torusware/speedus-redis Always updated official ... 29 [OK]
bitnami/redis Bitnami Redis Docker Image 22 [OK]
anapsix/redis 11MB Redis server image ... 6 [OK]
webhippie/redis Docker images for redis 4 [OK]
clue/redis-benchmark A minimal docker image t... 3 [OK]
williamyeh/redis Redis image for Docker 3 [OK]
unblibraries/redis Leverages phusion/baseim... 2 [OK]
greytip/redis redis 3.0.3 1 [OK]
servivum/redis Redis Docker Image 1 [OK]
...

2、取最新版的 Redis 镜像

这里我们拉取官方的最新版本的镜像:

1
$ docker pull redis:latest

img

针对Docker客户端版本大于 1.10.0 的用户

你可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://r46f0phk.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3、查看本地镜像

使用以下命令来查看是否已安装了 redis:

1
$ docker images

img

在上图中可以看到我们已经安装了最新版本(latest)的 redis 镜像。

4、运行容器

安装完成后,我们可以使用以下命令来运行 redis 容器:

1
$ docker run -itd --name redis-test -p 6379:6379 redis --requirepass "czqu@123"

参数说明:

  • -p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。
  • –requirepasss 设置密码

img

docker容器设置开机自启动:

1
--restart具体参数值详细信息``no - 容器退出时,不重启容器``on-failure - 只有在非0状态退出时才从新启动容器``always - 无论退出状态是如何,都重启容器

  还可以在使用 on-failure 策略时,指定 Docker 将尝试重新启动容器的最大次数;默认情况下,Docker 将尝试永远重新启动容器;

1
docker run --restart=on-failure:10 redis

  

  如果创建时未指定 –restart=always ,可通过 update 命令更改;

1
docker update --restart=always 容器ID

5、安装成功

最后我们可以通过 docker ps 命令查看容器的运行信息:

img

接着我们通过 redis-cli 连接测试使用 redis 服务。

1
$ docker exec -it redis-test /bin/bash

img

整合springboot

1.引入依赖

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cc.czqu</groupId>
<artifactId>redis-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>redis-test</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>11</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

2.创建实体类

随便创建一个实现序列化接口的实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package cc.czqu.redistest;

import lombok.Data;

import java.io.Serializable;

@Data
public class Book implements Serializable {
private int id;
private String name;
private String author;

}

3.配置application.properties

1
2
3
4
5
6
7
8
9
spring.redis.database=0
spring.redis.port=6379
spring.redis.password=czqu@123
spring.redis.host=192.168.63.129
spring.redis.jedis.pool.max-active=8 #最大连接数
spring.redis.jedis.pool.max-wait=-1ms #最大阻塞时间 -1表示无限制
spring.redis.jedis.pool.min-idle=0 #连接池中最小空闲连接数
server.port=9090

4.创建测试类

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
26
27
28
29
30
31
32
33
34
35
36
package cc.czqu.redistest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class BookController {
@Autowired
RedisTemplate redisTemplate;
@Autowired
StringRedisTemplate stringRedisTemplate;
@GetMapping("/test1")
public void test1()
{
System.out.println("hello");
ValueOperations<String,String> ops1=stringRedisTemplate.opsForValue();
ops1.set("name","三国演义");
String name=ops1.get("name");
System.out.println(name);
//实体类的读写
Book book1=new Book();
book1.setId(666);
book1.setAuthor("陈子琦");
book1.setName("快乐学习");
ValueOperations<String,Book> ops2= redisTemplate.opsForValue();
ops2.set("b1",book1);
Book b1= ops2.get("b1");
System.out.println(b1);
}

}