golang学习之go连接redis

  • Post author:
  • Post category:golang




一、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))
			}
		}
	}
}



版权声明:本文为weixin_56349119原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。