golang学习6:访问redis

Redis介绍

Redis是一个开源的内存数据库。特点就是快。所以经常用来做数据库的缓存。当然它的用途不止这些。下面摘抄下李文周博客对redis用途的一些举例:

  • 缓存系统,减轻主数据库(MySQL)的压力。
  • 计数场景,比如微博、抖音中的关注数和粉丝数。
  • 热门排行榜,需要排序的场景特别适合使用ZSET。
  • 利用LIST可以实现队列的功能

Redis支持的数据结构中常用的是string、hash、lists、sets和sorted sets。
另外它还支持发布/订阅,以及stream。

除了单例模式,redis还有哨兵模式和集群模式。但是要注意,并不是所有的redis客户端都支持哨兵模式和集群模式。我之前用hiredis(这是一个c语言的库)的时候就被坑了一把。

golang里有很多redis客户端开源库,这里主要讲讲go-redis连接Redis数据库并进行操作。这个库支持哨兵模式和集群模式。

安装go-redis

$ go get -u github.com/go-redis/redis/v8
go: downloading github.com/go-redis/redis/v8 v8.11.3
go get: added github.com/go-redis/redis/v8 v8.11.3

订阅与发布的例子

go-redis的库里例子很丰富,我就用我用过的订阅发布来写个简单的小程序。

go.mod源码:

module HAHA

go 1.16

require (
        github.com/cespare/xxhash/v2 v2.1.2 // indirect
        github.com/go-redis/redis/v8 v8.11.3 // indirect
)

main.go源码

package main

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

func main() {
        ctx := context.Background()

        rdb := redis.NewClient(&redis.Options{
                Addr:     "localhost:6379", // use default Addr
                Password: "xxx",
                DB:       0,                // use default DB
                PoolSize:     10,
        })

        pubsub := rdb.Subscribe(ctx, "mychannel1")

        // 确认订阅已经闯将成功
        _, err := pubsub.Receive(ctx)
        if err != nil {
                panic(err)
        }

        // 这个channel用于返回订阅的消息,缓存大小是100
        // pubsub关闭的时候,channel也会关闭
        ch := pubsub.Channel()

        // 发布一个消息,用于自测
        err = rdb.Publish(ctx, "mychannel1", "hello").Err()
        if err != nil {
                panic(err)
        }

        time.AfterFunc(time.Second, func() {
                // When pubsub is closed channel is closed too.
                _ = pubsub.Close()
        })

        // 消费消息
        for msg := range ch {
                fmt.Println(msg.Channel, msg.Payload)
        }

}

编译

go build -o main main.go

参考资料

Go语言操作Redis

go-redis的github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值