Go操作Redis
Go操作Redis
Redis
简介
Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。它支持数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询和流的地理空间索引。Redis具有内置的复制,Lua脚本,LRU驱逐,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
Redis安装
CentOS7
安装
1yum -y install epel-release
2yum -y install redis
CentOS8
安装
1dnf -y install redis
运行redis
默认监听在127.0.0.1:6379
1sed -i '/^bind/s@127.0.0.1@0.0.0.0@' /etc/redis.conf
2systemctl enable --now redis
安装go-redis
库
1go get -u github.com/go-redis/redis/v7
简单示例
Get/Set示例
1package main
2
3import (
4 "log"
5
6 "github.com/go-redis/redis/v7"
7)
8
9func main() {
10 client := redis.NewClient(&redis.Options{
11 Addr: "172.16.10.10:6379",
12 Password: "", // no password set
13 DB: 0, // use default DB
14 })
15
16 _, err := client.Ping().Result()
17 if err != nil {
18 log.Printf("redis连接失败,错误信息:%v\n", err)
19 return
20 }
21 log.Println("redis连接成功")
22
23 // Set
24 err = client.Set("name", "jerry", 0).Err()
25 if err != nil {
26 panic(err)
27 }
28
29 // Get
30 str := client.Get("name")
31 log.Println(str)
32}
运行结果
1go run main.go
22020/03/13 21:11:46 redis连接成功
32020/03/13 21:11:46 get name: jerry
连接哨兵模式
1package main
2
3import (
4 "github.com/go-redis/redis/v7"
5)
6
7func main() {
8 rdb := redis.NewFailoverClient(&redis.FailoverOptions{
9 MasterName: "master",
10 SentinelAddrs: []string{":26379"},
11 })
12 rdb.Ping()
13}
集群模式
1package main
2
3import (
4 "github.com/go-redis/redis/v7"
5)
6
7func main() {
8 rdb := redis.NewClusterClient(&redis.ClusterOptions{
9 Addrs: []string{":7000", ":7001", ":7002", ":7003", ":7004", ":7005"},
10 })
11 rdb.Ping()
12}
发布订阅
通常用作消息队列
1package main
2
3import (
4 "log"
5 "time"
6
7 "github.com/go-redis/redis/v7"
8)
9
10func main() {
11 client := redis.NewClient(&redis.Options{
12 Addr: "172.16.10.10:6379",
13 Password: "", // no password set
14 DB: 0, // use default DB
15 })
16
17 _, err := client.Ping().Result()
18 if err != nil {
19 log.Printf("redis连接失败,错误信息:%v\n", err)
20 return
21 }
22 log.Println("redis连接成功")
23
24 // 发布订阅
25 pubsub := client.Subscribe("channel1")
26
27 // 发布前先订阅
28 _, err = pubsub.Receive()
29 if err != nil {
30 panic(err)
31 }
32
33 // Go channel接收信息
34 ch := pubsub.Channel()
35
36 // 发布消息
37 err = client.Publish("channel1", "hello").Err()
38 if err != nil {
39 panic(err)
40 }
41
42 time.AfterFunc(time.Second, func() {
43 // 订阅和通道都关闭
44 _ = pubsub.Close()
45 })
46
47 // 消费
48 for msg := range ch {
49 log.Println(msg.Channel, msg.Payload)
50 }
51
52}
运行结果
12020/03/13 22:56:47 redis连接成功
22020/03/13 22:56:47 channel1 hello
- 原文作者:黄忠德
- 原文链接:https://huangzhongde.cn/post/Golang/Go_redis/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。