IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> golang学习6:访问redis -> 正文阅读

[大数据]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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:53:24  更:2021-09-11 18:54:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:40:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码