不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • Langchain
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • GO基础

  • 面向对象

  • 并发编程

  • 常用库

  • 数据库操作

    • GORM

    • sqlx

    • database-sql

    • GORMv2

    • go-redis

      • 01.go-redis包
      • 02.go-redis基本操作
        • 01.goRedis基本操作
          • 1.1 string
          • 1.2 hash
          • 1.3 list
      • 03.go-redis分布式锁
    • redigo

    • elastic

  • Beego框架

  • Beego商城

  • GIN框架

  • GIN论坛

  • 微服务

  • 设计模式

  • Go
  • 数据库操作
  • go-redis
xiaonaiqiang
2022-01-10
目录

02.go-redis基本操作

# 01.goRedis基本操作

# 1.1 string

  • string (opens new window)
package main

import (
	"context"
	"fmt"
	"time"

	"github.com/go-redis/redis/v8"
)

var Ctx = context.Background()

func main() {
	rdb := redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})
	// 1、设置 name=zhangsan   0代表永不过期
	rdb.Set(Ctx, "name", "zhangsan", 0)
  
	// 2、获取
	name, _ := rdb.Get(Ctx, "name").Result()
	fmt.Println(name)
  
	// 3、mset/mget:同时插入获取多个值
	rdb.MSet(Ctx, map[string]interface{}{
		"key1": "value1",
		"key2": "value2"}).Err()
	vals, _ := rdb.MGet(Ctx, "key1", "key2").Result()
	fmt.Println(vals, vals[0])
  
	// 4、判断key是否存在,可同时判断多个,不存在为:0,每存在一个+1
	fmt.Println(rdb.Exists(Ctx, "name", "k1", "k2").Val()) // 都存在:3
  
	// 5、获取字符串长度
	fmt.Println(rdb.StrLen(Ctx, "name").Val()) //4
  
	// 6、append:追加字符串,不存在就创建
	rdb.Append(Ctx, "name", "-append") // jack-append
	fmt.Println(rdb.Get(Ctx, "name").Val())
  
	// 7、setnx:如果key不存在,存储key:value,若key存在,存储失败
	rdb.SetNX(Ctx, "name1", "setnx_name", time.Second*10).Err()
  
	// 8、递增,步长为1:如果key不存在,那么key的值会先被初始化为0,在执行INCR操作
	rdb.Incr(Ctx, "age")
	rdb.IncrBy(Ctx, "age", 2) // 递增设置步长
  
	// 9、递减,步长为1:如果key不存在,那么key的值会先被初始化为0,在执行INCR操作
	rdb.Decr(Ctx, "count")
	rdb.DecrBy(Ctx, "DecrBy", 5) // 递减设置步长
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

# 1.2 hash

  • hash (opens new window)
package main

import (
	"context"
	"fmt"

	"github.com/go-redis/redis/v8"
)

var ctx = context.Background()

func main() {
	cli := redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})

	//1、单个key-value值:HSet/HGet
	cli.HSet(ctx, "user", "name", "zhangsan")
	cli.HSet(ctx, "user", "age", 100)
	name1, _ := cli.HGet(ctx, "user", "name").Result()
	age1, _ := cli.HGet(ctx, "user", "age").Result()
	fmt.Printf("name1:%v  age1:%v\n ", name1, age1) // name1:zhangsan  age1:100

	//2、多个key-value值:HMSet、HMGet
	m := make(map[string]interface{})
	m["age"] = 18
	m["address"] = "Japan"
	cli.HMSet(ctx, "user", m).Result()

	//3、获取hash中的全部数据
	m1, _ := cli.HGetAll(ctx, "user").Result()
	fmt.Println(m1) // map[address:Japan age:18 name:zhangsan]

	//4、获取所有key
	s2, _ := cli.HKeys(ctx, "user").Result()
	fmt.Println(s2) // [name age address]

	//5、获取所有value
	s3, _ := cli.HVals(ctx, "user").Result()
	fmt.Println(s3) // [zhangsan 18 Japan]

	//6、删除hash中指定的key,对应的value也就没了(可以同时删除多个)
	cli.HDel(ctx, "user", "address", "age")
	fmt.Println(cli.HGetAll(ctx, "user").Val()) // map[name:zhangsan]

	//7、获取Hash的内容长度
	n := cli.HLen(ctx, "user").Val()
	fmt.Printf("长度为:%d\n", n) // 长度为:1

	//8、判断hash中是否存在指定的key
	b1 := cli.HExists(ctx, "user", "name").Val() //true
	fmt.Println(b1)

	//9、HSetNX:保存一个key-value,如果存在field,则失败,不存在新建并存储
	b3, _ := cli.HSetNX(ctx, "user", "name", "lisi").Result()
	fmt.Println(b3) // false 保存失败
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

# 1.3 list

  • list (opens new window)
package main

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

var ctx = context.Background()

func main() {
	cli := redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "", // no password set
		DB:       0,  // use default DB
	})

	//1、将一条数据添加到列表的头部(类似入栈)
	cli.LPush(ctx, "mylist", "val1")

	//2、将一条或多条数据添加到列表的尾部
	cli.RPush(ctx, "mylist", "val99", "val100")

	//3、将一个切片添加到列表的头部
	s1 := []string{"val2", "val3", "val4"}
	cli.LPush(ctx, "mylist", s1)

	//4、获取List的长度
	fmt.Println(cli.LLen(ctx, "mylist").Val()) //6

	//5、获取list所有数据
	s2 := cli.LRange(ctx, "mylist", 0, -1).Val()
	fmt.Println(s2) // [val4 val3 val2 val1 val99 val100]

	//6、遍历
	for _, i := range s2 {
		fmt.Println(i) // [val5 val4 val3 val2 val1 val99 val100]
	}

	//7、移除List的第一个元素(头元素)
	cli.LPop(ctx, "mylist")

	//8、移除List的最后一个元素(尾元素)
	cli.RPop(ctx, "mylist")

	//9、截取List(通过下标,前闭后闭,会修改原数据)
	cli.LTrim(ctx, "mylist", 1, 2)
	fmt.Println(cli.LRange(ctx, "mylist", 0, -1).Val()) // [val2 val1]

	//10、检查数据库是否存在此List,1:存在 0:不存在
	fmt.Println(cli.Exists(ctx, "mylist2").Val()) // 0

	//11、通过下标更新List的值
	cli.LSet(ctx, "mylist", 1, "val200")

	//12、在列表指定的值之前或者之后插入值
	cli.LInsertBefore(ctx, "mylist", "val1", "qqq")
	cli.LInsertAfter(ctx, "mylist", "qqq", "hello~")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
上次更新: 2024/3/13 15:35:10
01.go-redis包
03.go-redis分布式锁

← 01.go-redis包 03.go-redis分布式锁→

最近更新
01
05.快递Agent智能体
06-04
02
200.AI Agent核心概念
06-04
03
105.Agent智能体梳理
06-04
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式