Golang redis中无序集合的操作

本文使用的redis客户端为go-redis

准备步骤

客户端的连接:
导入go-redis包:github.com/go-redis/redis/v8
创建客户端:

client := redis.NewClient(&redis.Options{
		Addr:     "192.168.7.4:6379",
		Password: "",
		DB:       0,
	})
使用

注解:集合中可以插入任意类型的数值,不需要整个集合为同一种类型。

1.插入数据

注解:在插入数据到时候,如果不存在这个集合,则会先创建一个空的集合,然后再执行插入操作。命令没有强制大写,小写也是可以的。
1.1 RPUSH追加插入

func excute() {
	command := "RPUSH"
	d, err := client.Do(context.TODO(), command, "words", "A","B").Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:2

注解:使用RPUSH在words集合中以追加的方法添加了A,B两个字符,操作成功后,Result()返回插入个数:2。再由于我是第一次插入数据,所以程序内部默认先帮我创建一个空集合,然后再将AB顺序插入。
1.2 LPUSH头部插入

func excute() {
	command := "LPUSH"
	d, err := client.Do(context.TODO(), command, "words", "C").Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:3

注解:LPUSH将会把数据插入到下标为0的位置。

2.查找数据

注解:集合的数据查找可以分为两类:1.按下标位置查找 2.区间范围查找。redis集合的下标最小为0,最大为-1,第二大为-2。
2.1 LINDEX下标查找
下标查找的时候,如果对应下标的值不存在或者集合不存在,则返回特殊类型:redis.Nil。
我们上面在worlds中插入了CAB三个值,所以我们查找下标为3将返回redis.Nil:

func excute() {
	command := "LINDEX"
	d, err := client.Do(context.TODO(), command, "words", 3).Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:empty

查找下标为1,应该是A:

func excute() {
	command := "LINDEX"
	d, err := client.Do(context.TODO(), command, "words", 1).Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:A

2.2 LRANGE区间范围查找
语法:client.Do(ctx,command,“collectionName”,“startIndex”,“endIndex”)
注解:下标startIndex跟endIndex可以是被双引号括起来的字符串也可以直接是阿拉伯数字,startIndex跟endIndex都为全区间[startIndex,endIndex]。(有效下标最小是0,最大是-1):

func excute() {
	command := "LRANGE"
	d, err := client.Do(context.TODO(), command, "words", 0, -1).Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:[C A B]

查询区间范围:-100 ~ 100

func excute() {
	command := "LRANGE"
	d, err := client.Do(context.TODO(), command, "words", -100, 100).Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:[C A B]

注解:真实有效的区间范围是[0,-1],开始下标为负数时,表示从集合最后面往前数。

3.删除数据

注解:redis6.2版本开始可以选择删除数量跟删除区间范围内的数据,6.2以下一次只能删除一个数据。
3.1 LPOP从头部开始删除
集合中数据:[C A B]

func excute() {
	command := "LPOP"
	d, err := client.Do(context.TODO(), command, "words").Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:C

3.2 RPOP从末尾开始删除
集合中数据:[C A B]

func excute() {
	command := "RPOP"
	d, err := client.Do(context.TODO(), command, "words").Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:B

4.更新集合中的数据

4.1 LSET更新数据
集合中数据[C A B]
更改下标为0的数据为B:

func excute() {
	command := "LSET"
	d, err := client.Do(context.TODO(), command, "words", "0", "B").Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:OK

通过LRANGE查看:

func excute() {
	command := "LRANGE"
	d, err := client.Do(context.TODO(), command, "words", "0", "-1").Result()
	if err == redis.Nil {
		fmt.Println("empty")
	} else if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println("结果:", d)
	}
}

结果:[B A B]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值