golang学习之go连接redis

一、redis是什么?

redis是一个键值对存储系统,value类型包含 string 字符串、list链表、set集合、zset有序集合等

二、使用步骤

1、安装go redis客户端

go get github.com/gomodule/redigo/redis

2、获取redis链接

// 获取redis链接
func ConnRedis() *redis.Conn {
    
    
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
    
    
		log.Fatal(err)
		panic(err)
	}
	return &c
}

3、redigo操作字符串

保存字符串

// 缓存字符串
func SetString(key, value string) {
    
    
	// 获取redis链接
	c := ConnRedis()
	// 函数结束时关闭连接
	defer (*c).Close()
	// 执行redis set 命令为key设置value
	r, err := (*c).Do("set", key, value)
	// 判断是否有错误返回
	if err != nil {
    
    
		log.Fatal(err)
		panic(err)
	}
	// 通过反射打印返回值信息
	t := reflect.TypeOf(r)
	println("t.name:", t.Name())
	println("t.kind:", t.Kind().String())

	v := reflect.ValueOf(r)
	println("v.value:", v.String())

}

查询缓存字符串

func GetString(key string) {
    
    
	// 获取redis链接
	c := ConnRedis()
	// 函数结束时关闭连接
	defer (*c).Close()
	// 执行redis get命令
	r, err := (*c).Do("get", key)
	if err != nil {
    
    
		log.Fatal(err)
		panic(err)
	}
	// 判断结果是否 字节切片 类型
	// 如果是转换成字符串打印结果
	if v, ok := r.([]uint8); ok {
    
    
		println(string(v))
	}
}

4、redigo操作hash数据

缓存数据

func SetHashstring() {
    
    
	c := ConnRedis()
	defer (*c).Close()
	r, err := (*c).Do("hmset", "hashKey", "hashkey1", "hashvalue1", "hashkey2", "hashvalue2")
	if err != nil {
    
    
		log.Fatal(err)
		panic(err)
	}

	t := reflect.TypeOf(r)
	println("t.name:", t.Name())
	println("t.kind:", t.Kind().String())

	v := reflect.ValueOf(r)
	println("v.value:", v.String())
}

获取hash缓存

func GetHashstring() {
    
    
	c := ConnRedis()
	defer (*c).Close()
	r, err := (*c).Do("hgetall", "hashKey")
	if err != nil {
    
    
		log.Fatal(err)
		panic(err)
	}

	if v, ok := r.([]interface{
    
    }); ok {
    
    
		for _, e := range v {
    
    

			if s, ok := e.([]uint8); ok {
    
    
				println(string(s))
			}
		}
	}

}

5、redigo操作list数据

缓存数据

type myData struct {
    
    
	name string
	age  int
}

func SetValueToList() {
    
    
	c := ConnRedis()
	defer (*c).Close()
	d := myData{
    
    name: "Saddam", age: 23}
	d1 := myData{
    
    name: "Saddam2", age: 20}
	r, err := (*c).Do("RPUSH", "listkey", d, d1)
	if err != nil {
    
    
		log.Fatal(err)
		panic(err)
	}

	t := reflect.TypeOf(r)
	println("t.name:", t.Name())
	println("t.kind:", t.Kind().String())

	v := reflect.ValueOf(r)
	println("v.value:", v.Int())
}

遍历list缓存

func GetValueFromList() {
    
    
	c := ConnRedis()
	defer (*c).Close()

	r, err := (*c).Do("LRANGE", "listkey", 0, -1)
	if err != nil {
    
    
		log.Fatal(err)
		panic(err)
	}

	if v, ok := r.([]interface{
    
    }); ok {
    
    
		for _, e := range v {
    
    

			if s, ok := e.([]uint8); ok {
    
    
				println(string(s))
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_56349119/article/details/125837792