Golang 通过开源库 go-redis 操作 NoSQL 缓存服务器

这篇具有很好参考价值的文章主要介绍了Golang 通过开源库 go-redis 操作 NoSQL 缓存服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前置条件:

1、导入库:

import (

"github.com/go-redis/redis/v8"

)

2、搭建哨兵模式集群

具体可以百度、谷歌搜索,网上现成配置教程太多了,不行还可以搜教程视频,跟着视频博主一步一个慢动作,慢慢整。

本文只介绍通过 “主从架构 / 哨兵模式” 访问的形式,这是因为,单个 redis 服务器在线上正式服务器,真实的生产环境之中是不太现实的。

好的:

1、首先定义一个 RedisClient 结构

type RedisClient struct {
	MasterName    string
	SentinelAddrs []string
	Password      string
	DB            int
	Client        *redis.Client
}

2、其次实现一个 FailoverClient(Redis 哨兵客户端)

func (my *RedisClient) NewFailoverClient() *redis.Client {
	sf := &redis.FailoverOptions{
		MasterName:    my.MasterName,       // 主节点名称
		SentinelAddrs: my.SentinelAddrs,    // 哨兵服务器地址列
		Password:      my.Password,         // 登入密码
		DB:            my.DB,               // 访问那一个DB(从0开始,缺省为0)
	}

	return redis.NewFailoverClient(sf)
}

Redis 哨兵服务器地址列表: 

    SentinelAddrs := []string{"172.31.109.138:20000",

        "172.31.109.138:20001",

        "172.31.109.138:20002"}

注意:

不是 Redis Master / Slaves 服务器地址,是哨兵服务器地址,即通过指定 --sentinel 运行的 redis-server 服务器绑定侦听的 IPEndPoint 地址。

这是因为,哨兵客户端通过链接哨兵服务器来获取当前的 redis-server 信息,如当前的 master 节点地址端点。

同样的主观下线、客观下线,我们并不需要单独进行处理,go-redis 库会自动为我们进行切换,当然,若希望在 go 程式之中捕获 master 节点主观下线事件,可以适用 AddHook 添加钩子方法。

package main

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

func main() {
	sentinelClient := redis.NewSentinelClient(&redis.Options{
		Addr: "sentinel-ip:port",
	})

	sentinelClient.AddHook(redis.NewFailoverHook(func(oldMaster, newMaster *redis.Client) {
		// 处理主观下线事件
		fmt.Printf("Master changed from %s to %s\n", oldMaster.Options().Addr, newMaster.Options().Addr)
	}))

	masterClient := sentinelClient.MasterFor("mymaster", nil)

	val, err := masterClient.Get(ctx, "key").Result()
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	fmt.Println("Value:", val)
}

3、构造 RedisClient 结构体

func NewRedisClient(master_name, password string, addresses []string, db int) *RedisClient {
	sentinel := RedisClient{
		MasterName:    master_name,
		SentinelAddrs: addresses,
		Password:      password,
		DB:            db,
	}

	sentinel.Client = sentinel.NewFailoverClient()
	return &sentinel
}

4、实现关闭 Redis 客户端接口

func (my *RedisClient) Close() {
	client := my.Client
	if client != nil {
		client.Close()
	}
}

5、实现 Ping 函数,测试服务器节点在线与否,但需要注意:多个节点之中若有一个节点反馈OK,都算是成功,所以不要过于信任该函数提供的服务器正常的反馈。

func (my *RedisClient) Close() {
	client := my.Client
	if client != nil {
		client.Close()
	}
}

6、Pipeline(管线)

func (my *RedisClient) Pipeline() (redis.Pipeliner, error) {
	client := my.Client
	if client == nil {
		return nil, fmt.Errorf("redis client connect is nil")
	}

	pipe := client.Pipeline()
	return pipe, nil
}

如何调用 Pipeline 管线?它是 Redis 之中一种批量执行写数据操作的机制,即人们可以一次性执行多个SET数据命令,并通过 Pipeline 一次性提交到 redis 服务器进行执行。

例:文章来源地址https://www.toymoban.com/news/detail-817384.html

	// 创建管线
	pipeline, err := my.redis.Pipeline()
	if err != nil {
		return err
	}
    
    ctx := context.Background()
	err := pipeline.Set(ctx, key, json, time.Second*time.Duration(USER_CACHE_TIMEOUT)).Err()
    if err != nil {
		return err
	}

    // 如果设置了命令则执行,否则可以忽略。
    bant := true
	if bany {
		_, err = pipeline.Exec(context.Background())
		if err != nil {
			return err
		}
	}

到了这里,关于Golang 通过开源库 go-redis 操作 NoSQL 缓存服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库缓存服务——NoSQL之Redis配置与优化

    目录 一、缓存概念 1.1 系统缓存 1.2 缓存保存位置及分层结构 1.2.1 DNS缓存 1.2.2 应用层缓存 1.2.3 数据层缓存 1.2.4 硬件缓存 二、关系型数据库与非关系型数据库 2.1 关系型数据库 2.2 非关系型数据库 2.3 关系型数据库和非关系型数据库区别: 2.4 非关系型数据库产生背景 2.5 总结

    2024年02月15日
    浏览(50)
  • springboot+redis+mysql+quartz-通过Java操作redis的KEYS*命令获取缓存数据定时更新数据库

    代码讲解: 3-点赞功能-定时持久化到数据库(pipeline+lua)-完善过程2_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1w14y1o7BV 本文章代码: blogLike_schedule/like03 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like03 数据

    2024年02月15日
    浏览(52)
  • springboot+redis+mysql+quartz-通过Java操作jedis使用pipeline获取缓存数据定时更新数据库

    代码讲解:6-点赞功能-定时持久化到数据库-pipeline+lua-优化pipeline_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1yP411C7dr 代码: blogLike_schedule/like06 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee.com/flowers-bloom-is-the-sea/XinQiUtilsOrDemo/tree/master/blogLike_schedule/like06 数据库表的

    2024年02月16日
    浏览(47)
  • springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库

    springboot+redis+mysql+quartz-通过Java操作jedis定时使用lua脚本获取缓存数据并更新数据库 代码讲解:7.1点赞功能-定时持久化到数据库-Java整合lua_哔哩哔哩_bilibili https://www.bilibili.com/video/BV1ZX4y1H7JT/ 代码: blogLike_schedule/like07 · xin麒/XinQiUtilsOrDemo - 码云 - 开源中国 (gitee.com) https://gitee

    2024年02月13日
    浏览(55)
  • 通过redis进行缓存分页,通过SCAN扫描进行缓存更新

    问题: 当我们要添加缓存时,如果我们用了PageHelper时,PageHelper只会对查询语句有效(使用到sql的查询),那么如果我们把查询到的数据都添加到缓存时,就会无法进行分页; 此时我们选择将分页后的数据加入缓存,前端传入page和count表示查询页数和个数,我们将其拼接到查

    2024年02月13日
    浏览(45)
  • golang通过go-git下载gitlab源码

    1 申请令牌 方法1:具体项目下申请: 方法2:全局申请 2 获取token 3 下载代码 替换下面: username token 参考: https://docs.gitlab.cn/jh/user/profile/personal_access_tokens.html

    2024年01月24日
    浏览(48)
  • 【Redis】golang操作Redis基础入门

    大家好 我是寸铁👊 总结了一篇【Redis】golang操作Redis基础入门sparkles: 喜欢的小伙伴可以点点关注 💝 Redis(Remote Dictionary Server)是一个开源的内存数据库,它主要用于存储键值对,并提供多种数据结构的支持。Redis 的主要作用包括: 1. 缓存 : Redis 可以作为缓存系统,将常用

    2024年04月11日
    浏览(40)
  • 【go语言开发】本地缓存的使用,从简单到复杂写一个本地缓存,并对比常用的开源库

    本文主要介绍go语言中本地缓存的使用,首先由简单到复杂手写3个本地缓存示例,使用内置的sync,map等数据结构封装cache,然后介绍常见的一些开源库,以及对比常用的开源库 本地缓存 是指将一部分数据存储在应用程序本地内存中,以提高数据访问速度和应用程序性能的技

    2024年02月04日
    浏览(35)
  • golang操作数据库--gorm框架、redis

    ①引入 ②初始化 ③增删改查 官网: http://gorm.io/ ①引入 ②初始化 ③增删改查 说明:Debug()可以查看执行的sql语句。 ④gorm gen的使用 a.先安装 (会安装到gopath的bin目录下,windows电脑,需要将该路径加入到系统路径) eg : b.举例: 说明1:windows电脑go install之后,把exe添加到系统路

    2024年02月10日
    浏览(42)
  • 使用SpringCache操作Redis缓存数据

    SpringCache是一个框架,实现了基于注解的缓存功能,只需要简单的加一个注解,就能实现缓存功能。 SpringCache提供了一层抽象,底层可以切换不同的缓存实现,例如: EHCache Caffeine Redis 使用(导入redis跟SpringCache的 依赖即可) @EnableCaching 开启缓存注解功能,加在启动类上 @Ca

    2024年01月20日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包