docker和redis踩过的小坑

104 阅读2分钟

先喊一嗓子吧:没有用上docker的小伙伴赶紧上车,现在前端招聘都不要专科生了
用不用docker和专科生有啥关系?
招聘不要专科生咱就多学点知识吧,找不到工作就自己创业,哈哈哈哈哈
幻想多年以后,有个记者采访我当年怎么走上创业道路的,我可以说:因为找不到工作

关于docker

使用docker也有好长时间了,都是轻度使用,比如不想安装mysql了就用docker起个mysql容器,确实是挺方便, 但是不建议新手用户直接上手,打个比喻:我没有经历过大饥荒时代,没有吃过窝窝头,就不能深刻体会到现在能吃饱穿暖是多么的不容易。同理,你没有被安装mysql,mongodb等数据库折磨过,你就不能体会到docker有多牛逼

关于项目

今天突然感觉自己的项目没有使用redis有点慢,那就用上吧,
但是我又不想在本机安装redis,所以要用docker run一个(懒点挺好,懒是科技发展的原动力!)

关于redis的代码

全局ini文件

[redis]
ip   = 127.0.0.1
port = 6379
redisEnable = true

redis文件

package modules

import (
	"context"
	"encoding/json"
	"time"

	"github.com/go-redis/redis/v8"
	"gopkg.in/ini.v1"
)

var ctx = context.Background()
var rdbClient *redis.Client
var redisEnable bool

func init() {

	config, _ := ini.Load("./conf/app.ini")
	ip := config.Section("redis").Key("ip").String()
	port := config.Section("redis").Key("port").String()
	redisEnable, _ = config.Section("redis").Key("redisEnable").Bool()
	if redisEnable {
		rdbClient = redis.NewClient(&redis.Options{
			Addr:     ip + ":" + port,
			Password: "",
			DB:       0,
		})

		_, err := rdbClient.Ping(ctx).Result()
		if err != nil {
			println("redis数据库连接失败")
		} else {
			println("redis数据库连接成功...")
		}
	}

}

type redisDb struct{}

func (c redisDb) Set(key string, value interface{}, expiration int) {
	if redisEnable {
		v, err := json.Marshal(value)
		if err == nil {
			rdbClient.Set(ctx, key, string(v), time.Second*time.Duration(expiration))
		}
	}
}

func (c redisDb) Get(key string, obj interface{}) bool {
	if redisEnable {
		valueStr, err1 := rdbClient.Get(ctx, key).Result()
		if err1 == nil && valueStr != "" {
			err2 := json.Unmarshal([]byte(valueStr), obj)
			return err2 == nil
		}
		return false
	}
	return false
}
func (c redisDb) Delete(key string) bool {
	if redisEnable {
		_, err := rdbClient.Del(ctx, key).Result()
		return err == nil
	}
	return false
}

var RedisDb = &redisDb{}

我踩的坑

刚开始我链接redis的ip地址一直写的是docker容器的ip

WeChate8f86b42487c6dcfa703a7cba2f12ddc.jpg 这是错误的,容器已经和宿主机端口映射,要连本机的6379端口