Golang Redis 基本操作

Posted Time-Traveler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang Redis 基本操作相关的知识,希望对你有一定的参考价值。


本文有序集合参考至 https://www.lsdcloud.com/go/middleware/go-redis.html,基本操作看文档就行了,为了更整体,直接复制了有序集合部分代码,厚着脸皮标个原创

Golang Redis基本操作:

package main

import (
	"fmt"
	"github.com/go-redis/redis"
)

// 声明一个全局的redisDb变量
var client *redis.Client

// 根据redis配置初始化一个客户端
func initClient() (err error) 
	client = redis.NewClient(&redis.Options
		Addr:     "localhost:6379", // redis地址
		Password: "12345678",               // redis密码,没有则留空
		DB:       0,                // 默认数据库,默认是0
	)

	//通过 *redis.Client.Ping() 来检查是否成功连接到了redis服务器
	_, err = client.Ping().Result()
	if err != nil 
		return err
	
	return nil


func main() 
	err := initClient()
	if err != nil 
		//redis连接错误
		panic(err)
	
	fmt.Println("Redis连接成功")

	//RegularKeys()
	//HashKeys()
	//ListKeys()
	//SetKeys()
	ZsetKeys()




func HashKeys()(err error)
	err = client.HSet("golang","version","1111111").Err()
	if err!=nil
		panic(err)
	

	value,err := client.HGet("golang","version").Result()
	fmt.Println("version is:",value)

	fieldMap := make(map[string]interface)
	fieldMap["path"] = "xxx/xxx/xxx"
	fieldMap["date"] = "2021-5-10"
	err = client.HMSet("golang",fieldMap).Err()
	if err!=nil
		panic(err)
	
	values,err := client.HGetAll("golang").Result()
	if err!=nil
		panic(err)
	
	fmt.Println("values are:",values)

	return


func RegularKeys()(err error)

	err = client.Set("regular","regular",0).Err()
	if err!=nil
		panic(err)
	
	err = client.Set("regular1","regular1",0).Err()
	if err!=nil
		panic(err)
	

	value, err := client.Get("regular").Result()
	fmt.Println("value is: ",value)

	err = client.GetSet("regular","regular1").Err()
	if err!=nil
		panic(err)
	
	mvalue, err := client.MGet("regular","regular1").Result()
	fmt.Println("values are: ",mvalue)

	//rds.Del("regular")
	return


func ListKeys()(err error)

	err = client.LPush("pushkey","data1","data2","data3").Err()
	if err!=nil
		panic(err)
	
	values, err := client.LRange("pushkey",0,-1).Result()
	if err!=nil
		panic(err)
	
	fmt.Println("values are:",values)
	err = client.RPush("pushkey","data4").Err()
	if err!=nil
		panic(err)
	
	values, err = client.LRange("pushkey",0,-1).Result()
	if err!=nil
		panic(err)
	
	fmt.Println("values are:",values)

	err = client.LPop("pushkey").Err()
	if err!=nil
		panic(err)
	
	values, err = client.LRange("pushkey",0,-1).Result()
	if err!=nil
		panic(err)
	
	fmt.Println("values are:",values)

	err = client.RPop("pushkey").Err()
	if err!=nil
		panic(err)
	
	values, err = client.LRange("pushkey",0,-1).Result()
	if err!=nil
		panic(err)
	
	fmt.Println("values are:",values)
	err = client.LRem("pushkey",0, "data1").Err()
	if err!=nil
		panic(err)
	
	values, err = client.LRange("pushkey",0,-1).Result()
	if err!=nil
		panic(err)
	
	fmt.Println("values are:",values)
	return




func SetKeys()(err error)
	err = client.SAdd("setkey",100,200,300).Err()
	size,err := client.SCard("setkey").Result()
	if err!=nil
		panic(err)
	
	fmt.Println("size of set is:",size)

	members,err := client.SMembers("setkey").Result()
	if err!=nil
		panic(err)
	
	fmt.Println("members are:",members)

	member := 1000
	result,err := client.SIsMember("setkey",member).Result()
	if err!=nil
		panic(err)
	
	var flag string
	if !result 
		flag = "not "
	
	fmt.Println(fmt.Sprintf("%d is %sa member of setkey",member, flag))

	// 集合操作
	client.SAdd("setkey1",100,200,900,2300).Err()

	res, _ := client.SInter("setkey","setkey1").Result()
	fmt.Println("交集:",res)

	res, _ = client.SDiff("setkey1","setkey").Result()
	fmt.Println("差集:",res)

	member1, _ := client.SPop("setkey1").Result()
	fmt.Println("setkey1删除:",member1)

	member2, _ := client.SPopN("setkey",2).Result()
	fmt.Println("setkey删除:",member2)

	client.SMove("setkey","setkey1", 100)
	members, _ = client.SMembers("setkey1").Result()
	fmt.Println("setkey移动:",members)

	client.Del("setkey")
	client.Del("setkey1")
	return



func ZsetKeys()(err error)
	zsetKey := "language_rank"
	languages := []redis.Z
		Score: 90.0, Member: "Golang",
		Score: 98.0, Member: "Java",
		Score: 95.0, Member: "Python",
		Score: 97.0, Member: "javascript",
		Score: 92.0, Member: "C/C++",
	

	num, err := client.ZAdd(zsetKey, languages...).Result()
	if err != nil 
		fmt.Printf("zadd failed, err:%v\\n", err)
		return
	
	fmt.Printf("ZAdd添加成功 %d 元素\\n", num)
	// 添加一个元素到集合
	client.ZAdd(zsetKey, redis.ZScore: 87, Member: "Vue").Err()

	//给元素Vue加上8分,最终vue得分95分
	client.ZIncrBy(zsetKey, 8, "Vue")
	// 返回从0到-1位置的集合元素, 元素按分数从小到大排序 0到-1代表则返回全部数据
	values, err := client.ZRange(zsetKey, 0, -1).Result()
	if err != nil 
		panic(err)
	
	for _, val := range values 
		fmt.Println(val)
	

	//返回集合元素的个数
	size, err := client.ZCard(zsetKey).Result()
	if err != nil 
		panic(err)
	
	fmt.Println(size)

	//统计某个分数段内的元素个数,这里是查询的95<分数<100的元素个数
	count, err := client.ZCount(zsetKey, "95", "100").Result()
	if err != nil 
		panic(err)
	
	fmt.Println(count)

	values, err= client.ZRange(zsetKey, 0, -1).Result()
	if err != nil 
		panic(err)
	
	for _, val := range values 
		fmt.Println(val)
	

	// 初始化查询条件, Offset和Count用于分页
	op := redis.ZRangeBy
		Min:"80", // 最小分数
		Max:"100", // 最大分数
		Offset:0, // 类似sql的limit, 表示开始偏移量
		Count:5, // 一次返回多少数据
	
	//根据分数范围返回集合元素,元素根据分数从小到大排序,支持分页。
	values, err = client.ZRangeByScore(zsetKey, op).Result()
	if err != nil 
		panic(err)
	
	for _, val := range values 
		fmt.Println(val)
	

	score, _ := client.ZScore(zsetKey, "Golang").Result()
	fmt.Println(score)
	//根据元素名,查询集合元素在集合中的排名,从0开始算,集合元素按分数从小到大排序
	rk, _ := client.ZRank(zsetKey, "Java").Result()
	fmt.Println(rk)

	// 删除集合中的元素Java
	client.ZRem(zsetKey, "Java")

	// 删除集合中的元素Golang和Vue
	// 支持一次删除多个元素
	client.ZRem(zsetKey, "Golang", "Vue")

	//根据索引范围删除元素
	//集合元素按分数排序,从最低分到高分,删除第0个元素到第5个元素。
	// 这里相当于删除最低分的几个元素
	client.ZRemRangeByRank(zsetKey, 0, 5)

	// 位置参数写成负数,代表从高分开始删除。
	// 这个例子,删除最高分数的两个元素,-1代表最高分数的位置,-2第二高分,以此类推。
	client.ZRemRangeByRank(zsetKey, -1, -2)
	return

推荐一篇文章:https://www.lsdcloud.com/go/middleware/go-redis.html,里面有很多事例

以上是关于Golang Redis 基本操作的主要内容,如果未能解决你的问题,请参考以下文章

Golang操作Redis

Golang操作Redis

Golang操作Redis

Golang操作Redis

golang操作redis

golang--redis基本介绍