安装
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
使用
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)
}
}