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 命令来查看可用版本:

$ 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 镜像

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

$ docker pull redis:latest

img

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

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

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:

$ docker images

img

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

4、运行容器

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

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

参数说明:

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

img

docker容器设置开机自启动:

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

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

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

  

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

docker update --restart=always 容器ID

5、安装成功

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

img

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

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

img

整合springboot

1.引入依赖

<?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.创建实体类

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

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

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.创建测试类

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);
    }

}