Golang操作Redis

news2024/11/25 4:48:16

一. 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() //关闭连接池
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1626679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony实战开发-按钮 (Button)

Button是按钮组件,通常用于响应用户的点击操作,其类型包括胶囊按钮、圆形按钮、普通按钮。Button做为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮。具体用法请参考Button。 创建按钮 Button通过调用接口来创建,接口调用有…

APISix如何配置gzip压缩、cache、跨域

网上查到的apisix的配置很多都很古老,要改配置文件。其实现在apisix都是使用插件方式实现各种配置,很方便。这里简单介绍下三个常用插件、gzip压缩、cache缓存和跨域插件。这里均使用apisix的Dashboard看板进行配置。 gzip压缩 1. 打开apisix看板&#…

Web-SpringBootWen

创建项目 后面因为报错,所以我把jdk修改成22,仅供参考。 定义类,创建方法 package com.start.springbootstart.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotati…

单细胞+RIP-seq项目文章| Cell ReportshnRNPU蛋白在小鼠精原干细胞池建立的关键作用

精原干细胞(SSCs)是负责精子发生的干细胞,具有自我更新和分化产生功能性精子的能力。SSCs的持续再生对于维持雄性生育力至关重要。然而,SSC池的发育起源尚不清楚。在哺乳动物中,SSCs源自名为 prospermatogonia&#xf…

基于JAVA实现的贪吃蛇小游戏

JAVA贪吃蛇小游戏实现: 贪吃蛇曾经在我们的童年给我们带来了很多乐趣。贪吃蛇这款游戏现在基本上没人玩了,甚至在新一代人的印象中都已毫无记忆了。。。但是,这款游戏可以在一定程度上锻炼自己的编程能力。 目前这个版本只是一个测试版本,所以…

AI:162-如何使用Python进行图像识别与处理深度学习与卷积神经网络的应用

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一.如何使用Python进行图像识别与处理…

在Windows 10中如何关闭BitLocker加密?这里提供详细步骤

序言 BitLocker加密将有助于保持卷或闪存驱动器处于安全模式。但是,如果你不再需要BitLocker加密,你可以在Windows 10计算机上轻松删除BitLocker加密。在这里,我们将向你展示在Windows 10上删除/禁用BitLocker驱动器加密的四种方法。 通过控…

Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集推流

一、前言 用ffmpeg采集本地摄像头,如果不指定格式的话,默认小分辨率比如640x480使用rawvideo格式,大分辨率比如1280x720使用mjpeg格式,当然前提是这个摄像头设备要支持这些格式。目前市面上有一些厂家做的本地设备支持264格式&am…

1688获得店铺所有商品API接口技术解析与应用实践

在电商领域,快速获取店铺所有商品信息对于商家和开发者来说至关重要。1688作为国内领先的B2B电商平台,提供了丰富的API接口供开发者使用,其中获得店铺所有商品API接口是其中之一。本文将深入解析该API接口的技术实现,并探讨其在实…

嵌入式中全栈工程师是怎么样的?

这两天有小伙伴问我,如何才能做到嵌入式全栈?我用visio软件画了一张图,为大家讲解。 此图为博主认为的嵌入式全栈,从硬件到软件全套技术栈,我们“从下往上”讲解。 1、首先是需要有原理图库,可以自己画,也可以从别人那里拷贝。有了原理图库,就开始画原理图。画原理图需…

​「Python大数据」词频数据渲染词云图导出HTML

前言 本文主要介绍通过python实现数据聚类、脚本开发、办公自动化。词频数据渲染词云图导出HTML。 一、业务逻辑 读取voc数据采集的数据批处理,使用jieba进行分词,去除停用词词频数据渲染词云图将可视化结果保存到HTML文件中二、具体产出 三、执行脚本 python wordCloud.p…

基于模糊控制的电动汽车锂电池SOC主动均衡电路MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 模型在 Matlab/Simulink仿真平台中搭建16节电芯锂电池电路模型,主要针对电动车锂电池组SOC差异性,采用模糊控制算法动态调节均衡电流,以减少均衡时间和能量损耗。…

OpenStack 云平台管理

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1)关于浮动 IP 地址 2)关于快照 1.3、案例环境 1)本案例实验环境 2)案例需求 3)案例实现思路 二、案例实施 2.1、部署 OpenStack 2.2、创建…

WSL2无法ping通本地主机ip的解决办法

刚装完WSL2的Ubuntu子系统时,可能无法ping通本地主机的ip: WSL2系统ip: 本地主机ip: 在powershell里输入如下的命令: New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias &quo…

反映工业发展质量与效益的主要指标有哪些

我国经济已由高速增长阶段转向高质量发展阶段,这是新时代我国经济发展的基本特征。推动高质量发展,是保持经济持续健康发展的必然要求,是适应我国社会主要矛盾变化和全面建成小康社会、全面建设社会主义现代化国家的必然要求,是遵…

解决Gson转Map时数值int、long等转为Double

今天尝试使用Gson,发现转Map时数值都转成了Double,百度无果后,通过查看源码,尝试可以通过自定义对象转数值策略来解决,特地记录一下; Gson默认采取将数值转换到Double的策略ToNumberPolicy.DOUBLE&#xf…

mysql的多表查询和子查询

多表查询:查询数据时,需要使用多张表来查询 多表查询分类: 1.内连接查询 2.外连接查询 3.子查询 笛卡尔积: create table class (id int primary key auto_increment,name varchar(10) ); create table student (id int primar…

2024软件测试面试题总结

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号【互联网杂货铺】,回复 1 ,免费获取软件测试全套资料,资料在手,涨薪更快 测试技术面试题 1、什么是兼容性测试?兼容性测试侧…

2024年Java JDK下载安装教程,附详细图文

文章目录 简介一、JDK的下载二、JDK的安装三、设置环境变量(不一定需要执行) 简介 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f34…

打印机连接电脑后打印无反应解决小方法

测试页打印失败是否参阅打印疑难解答已或得帮助 一台刚购买的新惠普打印机,拆箱后正常安装,接通电源、USB线连接电脑,正常安装驱动光盘;然后打印测试页来测试打印机,这个时候你点打印测试页,在打印任务里会…