步骤一:创建Redis客户端连接 在使用Redis进行订阅/发布之前,我们首先需要建立与Redis服务端的连接。为了实现这一步,我们可以使用github.com/go-redis/redis/v8包提供的NewClient函数。 import("context""github.com/go-redis/redis/v8")funcmain(){// 创建Redis客户端连接ctx:=context.Background()rdb:=redis.NewCl...
packagemainimport("fmt""log""sync"example"github.com/yoloyi/redis-example")funcmain(){varwg sync.WaitGroup// 这里我们用携程来模拟多个服务fori :=0; i <2; i++ { wg.Add(1)gofunc(iint){ client := example.InitRedis() pb := client.Subscribe("wait-close") fmt.Println("阻塞,等待读取...
//事务操作//TxPinlinefunc Txline() {// 开启一个TxPipeline事务pipe := rdb.TxPipeline()// 执行事务操作,可以通过pipe读写redisincr := pipe.Incr(ctx,"tx_pipeline_counter")pipe.Expire(ctx,"tx_pipeline_counter", time.Hour)// 上面代码等同于执行下面redis命令/// MULTI// INCR pipeline_c...
不过使用Redis的另一个弊端是消息不能堆积,一旦消费者节点没有消费消息,消息将会丢失。因此需要评估当下场景来选择适合的架构。 此处使用go-redis来实现Redis的发布与订阅。 二. 官方文档 官方文档有较为完整的例子: pubsub := rdb.Subscribe(ctx, "mychannel1") // Wait for confirmation that subscription is ...
上述代码中,我们首先创建了一个Redis客户端,然后使用Subscribe方法创建了一个订阅者,并指定订阅的频道为channel。然后,我们使用ReceiveMessage方法接收发布者发送的消息,并打印出来。 序列图 下面是一个通过使用Redis实现发布订阅模式的序列图: SubscriberRedisPublisherSubscriberRedisPublisherPublish messageSend messageProcess ...
pubsub := rdb.Subscribe(ctx,"channel") _, err := pubsub.Receive(ctx)iferr !=nil{panic(err) } ch := pubsub.Channel()formsg :=rangech { fmt.Println(msg.Channel, msg.Payload) } 上述只是Redis操作的基本示例,读者如果感兴趣可以可以根据具体需求查阅Redis文档以了解更多操作和函数。
1.Subscribe 订阅channel 例子1: // 订阅channel1这个channelsub:=client.Subscribe("channel1")// 读取channel消息iface,err:=sub.Receive()iferr!=nil{// handle error}// 检测收到的消息类型switchiface.(type){case*redis.Subscription:// 订阅成功case*redis.Message:// 处理收到的消息// 这里需要做一下...
# 第一个 redis-cli 客户端,在我们实例中我们创建了订阅频道名为 weiyigeekChat: redis 127.0.0.1:6379> SUBSCRIBE weiyigeekChat Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "weiyigeekChat" 3) (integer) 1 # 第二个 redis-cli 客户端,在同一个频道 weiyigeekChat 发布两次消息...
一,redis整体结构,存储结构 Go语言中的Redis整体结构分为客户端和服务器端两部分,其中服务器端实现了Redis协议的存储引擎。 在服务器端,Redis主要采用哈希表(hash table)作为主要数据结构来存储键值对。哈希表由多个哈希桶(hash bucket)组成,每个哈希桶包含若干个节点(node),每个节点表示一个键值对。