Golang操作Redis

一. 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 mainimport ("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 mainimport ("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 mainimport ("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 mainimport ("fmt""github.com/garyburd/redigo/redis"
)var pool *redis.Poolfunc 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.rhkb.cn/news/313988.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是用户体验(UX)文案,为什么它很重要?

网上购物如今比以往任何时候都更加相关。所以我们将以此为例说明什么是用户体验(UX)文案,以及为什么它很重要。 假设你去了一个在线商店。你需要执行一系列操作: 找到合适的部分选择你感兴趣的产品弄清楚它们是什么,…

使用composer开发自己的扩展包

前言 日常的开发中我们经常用到composer去安装其他人封装好的扩展包,如果你有好的功能代码想分享给其他人使用,就可以使用composer打包成扩展包。其他人用composer安装后就可以使用你的扩展包了。这篇文章教你如何打包自己的composer扩展包。 1.新建仓…

Mediasoup-demo 本地启动步骤(超详细)

Mediasoup-demo 本地启动步骤(超详细) 一.本人环境 系统:macos13.6.3 node: v16.20.2 npm:8.19.4 python: 3.9.6 二.下载代码 git 下载代码: git clone gitgithub.com:versatica/mediasoup-demo.git 三.代码介绍 下载下来…

微信小程序使用 Vant Weapp 中 Collapse 折叠面板 的问题!

需求:结合Tab 标签页 和 Collapse 折叠面板 组合成显示课本和章节内容,并且用户体验要好点! 如下图展示: 问题:如何使用Collapse 折叠面板 将内容循环展示出来? js中的数据是这样的 代码实现&#xff1…

面试宝典(1)——数据库篇(MySQL)

面试宝典(1)——数据库篇(MySQL) 1.什么是索引? 索引是一种用于加快数据库查询速度的数据结构。 索引可以帮助数据库快速定位到数据库表中特定列的记录,从而加快数据检索和查询的速度。 通过在表的列上…

webpack 打包优化 - splitChunks

打包时会遇到的问题: 打包文件过大,首屏加载时间过长,js阻塞页面渲染导致白屏改动业务代码后,对于第三方库也会一并重新打包到一个出口文件,浏览器无法利用缓存来减少请求和加载的时间 针对以上两个问题,…

paddlepaddle-gpu安装

背景 之前安装paddlepaddle-gpu遇到各种问题,安装不成功,之前使用了wsldocker的方式,可查看我之前博客:记录paddlepaddle-gpu安装,这要会导致我整个开发流程比较割裂 cuda版本 强烈推荐cuda11.8,paddlep…

【讯为Linux驱动笔记1】申请一个字符设备

Linux下每个设备都需要有一个专属设备号:主设备号 次设备号 【申请字符设备】 主设备号:一类驱动:如:USB驱动 次设备号:这类驱动下的某个设备 如:键盘鼠标 设备号是32位的dev_t类型的,高12位主…

【黑马头条】-day12项目部署和发布-jenkins

文章目录 1 持续集成2 软件开发模式2.1 瀑布模式2.2 敏捷开发2.2.1 迭代开发2.2.2 增量开发 3 Jenkins3.1 Jenkins安装3.1.1 导入镜像3.1.2 配置3.1.3 初始化设置 3.2 插件安装3.3 服务器环境准备3.3.1 Docker安装配置3.3.2 Git安装配置3.3.3 Maven安装配置 3.4 Jenkins工具配置…

亚信安全入选中国数据安全市场图谱

近日,全球领先的IT市场研究和咨询公司IDC发布了《IDC Market Glance:中国数据安全市场图谱,2024》报告(以下简称“报告”),报告展示了中国数据安全市场的构成和格局,遴选出不同细分市场领域的主…

管理 Python 项目的艺术:在 PyCharm 中使用虚拟环境(以BPnP为例)

在 PyCharm 中使用虚拟环境对于 Python 项目开发具有多方面的重要作用,这些作用体现在提升项目管理的效率、保障代码的可运行性以及维护项目的长期稳定性等方面。以下是使用虚拟环境的几个关键好处: 1. 依赖管理和隔离 虚拟环境允许每个项目拥有…

工作记录:vue-grid-layout 修改 margin 导致 item 高度剧烈变化

问题 用 vue-gird-layout 时发现,当改变 margin 值时,item 的尺寸也会跟着变化。 如下图:row height 和每个 item 的 h 都保持不变。修改 margin-y,item 的实际高度也跟着变了: 原因 研究了一番,发现原…

flutter release 报错 Error: SocketException: Failed host lookup:

flutter 的 debug 模式没有任何问题 ,打了release 包后一直报下面的错,查了一下是 因为没有网络权限 Error: SocketException: Failed host lookup: yomi-test-aws-sg.yomigame.games (OS Error: No address associated with hostname, errno 7) 按照下…

组合模式【结构型模式C++】

1.概述 组合模式又叫部分整体模式属于结构型模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 2.结构 组件(Component):定义了组合中所有对象的通用接口&#xff0c…

OpenHarmony鸿蒙南向开发案例:【智能窗户通风设备】

样例简介 本文档介绍了安全厨房案例中的相关智能窗户通风设备,本安全厨房案例利用轻量级软总线能力,将两块欧智通V200Z-R/BES2600开发板模拟的智能窗户通风设备和燃气告警设备组合成。当燃气数值告警时,无需其它操作,直接通知软总…

程序员学CFA——数量分析方法(四)

数量分析方法(四) 常见概率分布基本概念离散型随机变量与连续型随机变量离散型随机变量连续型随机变量 分布函数概率密度函数(PDF)累积分布函数(CDF) 离散分布离散均匀分布伯努利分布二项分布定义股价二叉树…

OpenStack云计算(十一)——OpenStack网络管理,验证OpenStack网络资源模型,验证来巩固和加深对OpenStack网络资源模型的理解

项目实训一 【实训题目】 验证OpenStack网络资源模型 【实训目的】 通过验证来巩固和加深对OpenStack网络资源模型的理解。 【实训准备】 (1)复习Neutron网络资源模型。 (2)重点理解网络、子网、端口和路由器的概念。 【实…

GPB | RegVar:基于深度神经网络的非编码区突变功能预测新方法

Genomics, Proteomics & Bioinformatics (GPB)发表了由军事医学研究院辐射医学研究所张成岗研究员、周钢桥研究员和卢一鸣副研究员团队完成的题为“RegVar: Tissue-specific Prioritization of Noncoding Regulatory Variants”的方法文章。我们的“…

【Redis 开发】一人一单,超卖问题(悲观锁,乐观锁,分布式锁)

锁 悲观锁乐观锁第一种:版本号法第二种:CAS法实现乐观锁 悲观锁与乐观锁的比较 一人一单分布式锁Redis实现分布式锁 悲观锁 认为线程问题一定会发生,因此在操作数据库之前先获取锁,确保线程串行执行,例如Synchronized…

【Leetcode】vector刷题

🔥个人主页:Quitecoder 🔥专栏:Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接:136.只出现一…