Go学习之redis的增删改查

Golang中针对redis的操作已经十分成熟,官方推荐的主流使用有两个,分别是:

1、redigo    官方文档:https://godoc.org/github.com/garyburd/redigo/redis

2、go-redis    官方文档:https://godoc.org/github.com/go-redis/redis


本文就以最主流的redigo进行介绍操作redis服务。


1、Windows安装redis图形界面管理(非必需)

官网下载:https://redisdesktop.com/




2、操作步骤

值得称赞的一点是,golang对redis的操作近乎类似于直接操作命令行的赶脚,下面就来体验一下。这里不对redis数据库的详情内容进行展开,如有需要,我会在后续的文章当中进行专门讲解。

(1)下载依赖
go get github.com/garyburd/redigo/redis

使用开发工具的朋友,可以通过工具进行下载(无须vpn)。


(2)创建连接
conn, err := redis.Dial("tcp",
	"127.0.0.1:6379",
	redis.DialDatabase(1),//dialOption参数可以配置选择数据库、连接密码、心跳检测等等
	redis.DialPassword("xxxx"))
if err != nil {
	fmt.Println("Connect to redis failed ,cause by >>>", err)
	return
}
defer conn.Close()


(3)插入值
//写入值{"test-Key":"test-Value"}
_, err = conn.Do("SET", "test-Key", "test-Value")
if err != nil {
	fmt.Println("redis set value failed >>>", err)
}


(4)检验key值是否存在

//检查是否存在key值
exists, err := redis.Bool(conn.Do("EXISTS", "test-Key"))
if err != nil {
	fmt.Println("illegal exception")
}
fmt.Printf("exists or not: %v \n", exists)

(5)获取值
//read value
v, err := redis.String(conn.Do("GET", "test-Key"))
if err != nil {
	fmt.Println("redis get value failed >>>", err)
}
fmt.Println("get value: ", v)

(6)给定一个kv的过期时间
//EX,5秒
_, err = conn.Do("SET", "test-Key", "test-Value", "EX", "5")
if err != nil {
	fmt.Println("redis set value failed >>>", err)
}


(7)删除key
//del kv
_, err = conn.Do("DEL", "test-Key")
if err != nil {
	fmt.Println("redis delelte value failed >>>", err)
}

希望更多操作的朋友,其实只要对redis的命令行操作掌握熟练,就可以轻松对golang的redigo进行轻松使用了。另外还支持flush、send等方法进行其它操作。



完整代码如下:

package main

import (
	"github.com/garyburd/redigo/redis"
	"fmt"
	"time"
)

func main() {
	conn, err := redis.Dial("tcp",
		"127.0.0.1:6379",
		redis.DialDatabase(1), //DialOption参数可以配置选择数据库、连接密码等
		redis.DialPassword("password"))
	if err != nil {
		fmt.Println("Connect to redis failed ,cause by >>>", err)
		return
	}
	defer conn.Close()

	//如果db有密码,可以设置
	//if _,err := conn.Do("AUTH","password");err !=nil{
	//	fmt.Println("connect db by pwd failed >>>",err)
	//}

	//写入值{"test-Key":"test-Value"}
	_, err = conn.Do("SET", "test-Key", "test-Value", "EX", "5")
	if err != nil {
		fmt.Println("redis set value failed >>>", err)
	}

	time.Sleep(10 * time.Second)
	//检查是否存在key值
	exists, err := redis.Bool(conn.Do("EXISTS", "test-Key"))
	if err != nil {
		fmt.Println("illegal exception")
	}
	fmt.Printf("exists or not: %v \n", exists)

	//read value
	v, err := redis.String(conn.Do("GET", "test-Key"))
	if err != nil {
		fmt.Println("redis get value failed >>>", err)
	}
	fmt.Println("get value: ", v)

	//del kv
	_, err = conn.Do("DEL", "test-Key")
	if err != nil {
		fmt.Println("redis delelte value failed >>>", err)
	}
}


-----------------------------------------

有任何建议或问题,欢迎加微信一起学习交流,欢迎从事IT,热爱IT,喜欢深挖源代码的行业大牛加入,一起探讨。

个人微信号:bboyHan



猜你喜欢

转载自blog.csdn.net/han0373/article/details/80611111