Docker Redis 安装和配置

# 安装

1.拉取镜像

docker search redis
docker pull redis:latest

2.启动容器

docker run -d --name my-redis -p 6379:6379 redis

如需要修改 redis 配置或持久化请执行 3-5 步

3.下载配置文件

redis.conf 是 Redis 的核心配置文件,默认 docker 运行的 redis 是不存在配置文件的,这里可以先从官网下载:

cd /usr/local/etc/
mkdir redis
cd redis
wget http://download.redis.io/redis-stable/redis.conf

注意:redis 配置文件必须与 redis 的版本相同,不止 redis,包括 mysql 等,docker 中安装时配置内容、配置文件位置都可能存在差异,在映射文件时需要小心。

查看 redis 日志,有版本号

docker logs my-redis

可访问 redis 的 github 仓库,将版本号换为 docker 中 redis 的版本

https://github.com/redis/redis/blob/6.2.6/redis.conf

4.修改默认配置信息

vi redis.conf

# bind 127.0.0.1 -::1  #这行要注释掉,解除本地连接限制
protected-mode no  #默认yes,如果设置为yes,则只允许在本机的回环连接,其他机器无法连接。
daemonize no  #默认no 为不守护进程模式,docker部署不需要修改,docker run -d本身就是后台启动,不然会冲突
# requirepass foo  # 根据需要设置密码
appendonly yes  #持久化

5.启动 Redis 并设置链接密码

docker run --name my-redis -p 6379:6379 -v /usr/local/etc/redis.conf:/etc/redis/redis.conf -v /usr/local/etc/redis:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes

参数说明:

  •  –name redis-test:容器名称。
  • -p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机 ip:6379 访问到 Redis 的服务。
  • -v /docker-data/redis/redis.conf:/etc/redis/redis.conf : 将主机中配置文件挂载到容器中
  • -v /docker-data/redis:/data : 将主机中 data 挂载到容器的/redis
  • -d redis redis-server /etc/redis/redis.conf:表示后台启动 redis,以配置文件启动 redis,加载容器内的 conf 文件。
  • redis-server /etc/redis/redis.conf : 容器中以配置文件方式启动 redis
  • redis-server –appendonly yes : 在容器执行 redis-server 启动命令,并打开 redis 持久化配置
  • redis-server –requirepass 123456 :redis 连接密码,本地可不设置

6.docker 开启容器自启动

docker container update --restart=always my-redis

# 可视化工具

RedisInsight

https://redis.io/insight/

# 使用

Redis 的 golang 驱动

go get -u https://github.com/redis/go-redis

# 示例代码

import (
    "context"
    "github.com/go-redis/redis/v9"
)

var ctx = context.Background()

func ExampleClient() {
    rdb := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379", // 指定redis的地址
        Password: "", // 指定待连接redis的密码,没有就为空串
        DB:       0,  // 指定默认连接的库,默认是0号库
    })

    err := rdb.Set(ctx, "key", "value", 0).Err() // 向redis中设置值
    if err != nil {
        panic(err)
    }

    val, err := rdb.Get(ctx, "key").Result()     // 取出redis中的值 
    if err != nil {
        panic(err)
    }
    fmt.Println("key", val)

    val2, err := rdb.Get(ctx, "key2").Result()
    if err == redis.Nil {
        fmt.Println("key2不存在")
    } else if err != nil {
        panic(err)
    } else {
        fmt.Println("key2", val2)
    }
}
使用 Hugo 构建
主题 StackJimmy 设计