Golang操作Redis的实现示例

 更新时间:2025年11月07日 11:32:47   作者:两片空白  
本文介绍了Redis作为高性能key-value数据库的特性,包括数据持久化、丰富的数据结构、高并发性能、原子操作以及连接池管理,通过实例展示了使用Redis进行String、List和Hash操作,以及设置过期时间和连接池的管理,感兴趣的可以了解一下

一. Redis介绍

1.1 简介

Redis是完全开源免费的,遵循BSD协议,是一个高性能的key-value数据库。

Redis与其它的key-value缓存产品有以下三个特点:

  • Redis支持数据持久化,可以见内存中的数据报错在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供string,list(链表),set(集合),hash表等数据结构的存储。
  • Redis支持数据备份,即master-slave模式的数据备份。

1.2 Redis优势

  • 性能极高——Redis能读的速度是110000次/秒,写的速度是81000次/秒,单机可以达到15w qps,通常适合做缓存。
  • 丰富的数据类型——Redis支持二进制案例的strings,lists,hashes,sets及ordered sets数据类型操作。
  • 原子——Redis的所有操作都是原子的,意思就是要么成功执行,要么失败完全不执行。单个操作是原子的。多操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性——Redis还支持publish/subscribe,通知,key过期等特性。

Redis与其它的key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子操作,这是一个不同于其它数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于内存大小。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂数据结构,在内存中操作起来简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生,因为他们不需要进行随机访问。

1.3 redis的使用

使用第三方开源的redis库:github.com/garyburd/redigo/redis

命令行输入:

go get github.com/garyburd/redigo/redis

二. 链接Redis

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("conn redis fail ", err)
		return
	}
	defer c.Close()

	fmt.Println("conn redis succ")
}

三. String类型的Set,Get操作

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("conn redis fail ", err)
		return
	}
	defer c.Close()

	_, err = c.Do("Set", "abc", 100)
	if err != nil {
		fmt.Println("set fail", err)
		return
	}

	//将返回结果转为int类型
	r, err := redis.Int(c.Do("Get", "abc"))
	if err != nil {
		fmt.Println("get fail", err)
		return
	}
	fmt.Println(r)
}

         输出结果:

        命令行输出:

四. String批量操作

五. 设置过期时间

package main

import (
	"fmt"
	"time"

	"github.com/garyburd/redigo/redis"
)

func main() {
	c, err := redis.Dial("tcp", "127.0.0.1:6379")
	if err != nil {
		fmt.Println("conn redis fail ", err)
		return
	}
	defer c.Close()

	_, err = c.Do("set", "k1", 1)
	if err != nil {
		fmt.Println("set fail ", err)
		return
	}
	//设置过期时间10秒
	_, err = c.Do("expire", "k1", 10)
	if err != nil {
		fmt.Println("expire fail", err)
		return
	}

	r, err := redis.Int(c.Do("get", "k1"))
	if err != nil {
		fmt.Println("get fail ", err)
		return
	}
	fmt.Printf("k1=%d\n", r)

	time.Sleep(10 * time.Second)
	//过10秒已经过期 再获得失败
	r, err = redis.Int(c.Do("get", "k1"))
	if err != nil {
		fmt.Println("get fail ", err)
		return
	}
	fmt.Printf("k1=%d\n", r)
}

输出:

六. List队列操作

七.  Hash表

八. Redis连接池

package main

import (
	"fmt"

	"github.com/garyburd/redigo/redis"
)

var pool *redis.Pool

func init() {
	pool = &redis.Pool{
		MaxIdle: 16, //最初的连接数量
		//MaxActive: 1000000, //最大连接数量
		MaxActive:   0,   //连接池最大连接数量,不确定可以使用0(0表示自动定义),按需分配
		IdleTimeout: 300, //连接关闭时间300秒,(300秒内不使用自动关闭)
		Dial: func() (redis.Conn, error) { //要连接的数据库
			return redis.Dial("tcp", "127.0.0.1:6379")
		},
	}
}

func main() {
	c := pool.Get() //从连接池中取一个连接
	_, err := c.Do("set", "k1", "v1")
	if err != nil {
		fmt.Println("set fail ", err)
		return
	}

	v, err := redis.String(c.Do("get", "k1"))
	if err != nil {
		fmt.Println("get fail ", err)
		return
	}
	fmt.Println(v)
	pool.Close() //关闭连接池
}

到此这篇关于Golang操作Redis的实现示例的文章就介绍到这了,更多相关Golang操作Redis内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang 配置和启动 HTTPS 服务器

    Golang 配置和启动 HTTPS 服务器

    golang-https-example 是一个展示如何在 Go 语言中实现 HTTPS 服务器的开源项目,该项目通过简单的代码示例,帮助开发者理解如何在 Go 中配置和启动一个 HTTPS 服务器,下面就来详细的介绍一下
    2026-05-05
  • Go语言实现栈与队列基本操作学家

    Go语言实现栈与队列基本操作学家

    go语言中,并没有栈与队列相关的数据结构,但是我们可以借助切片来实现栈与队列的操作;接下来我们一起实现栈与队列基本操作,感兴趣的可以了解一下
    2022-11-11
  • Go语言zip文件的读写操作

    Go语言zip文件的读写操作

    本文主要介绍了Go语言zip文件的读写操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go语言fmt包的具体使用

    Go语言fmt包的具体使用

    Go语言的fmt包提供了丰富多样的输入输出功能,无论是格式化输出、文件写入,还是从各种输入源读取数据,都能轻松应对,具有一定的参考价值,感兴趣的可以了解一下
    2025-07-07
  • GoLand安装与环境配置的完整步骤

    GoLand安装与环境配置的完整步骤

    作为一个go语言程序员,觉得自己有义务为go新手开一条更简单便捷的上手之路,下面这篇文章主要给大家介绍了关于GoLand安装与环境配置的完整步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 深入理解Go语言设计模式之函数式选项模式

    深入理解Go语言设计模式之函数式选项模式

    在 Go 语言中,函数选项模式(Function Options Pattern)是一种常见且强大的设计模式,用于构建可扩展、易于使用和灵活的 API,本文就来看看它的具体用法吧
    2023-05-05
  • Golang urfave/cli库简单应用示例详解

    Golang urfave/cli库简单应用示例详解

    这篇文章主要为大家介绍了Golang urfave/cli库简单应用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Go语言中函数可变参数(Variadic Parameter)详解

    Go语言中函数可变参数(Variadic Parameter)详解

    在Python中,在函数参数不确定数量的情况下,可以动态在函数内获取参数。在Go语言中,也有类似的实现方式,本文就来为大家详细讲解一下
    2022-07-07
  • Gin的中间件执行流程与用法详解

    Gin的中间件执行流程与用法详解

    我们在使用Gin框架进行Web开发的时候,基本上都会遇到登录拦截的场景,在Gin当中, 中间件和业务处理函数都是一样的类型,都是一种函数,本文给大家介绍了Gin的中间件执行流程与用法,需要的朋友可以参考下
    2024-04-04
  • Golang读写Excel的方法教程

    Golang读写Excel的方法教程

    这篇文章主要给大家介绍了关于Golang读写Excel的方法教程,golang操作excel利用的是Excelize,Excelize是Golang编写的一个用来操作 Office Excel 文档类库,基于微软的Office OpenXML标准,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05

最新评论