02.go-redis基本操作
# 01.goRedis基本操作
# 1.1 string
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
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
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
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
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
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