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.mzph.cn/pingmian/3676.shtml

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

相关文章

python hashlib模块介绍

hashlib是Python标准库中的一个模块,用于提供常见哈希函数的接口。它可以用来计算数据的哈希值,包括MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512等算法。 下面是hashlib模块的一些常见方法和特点: 哈希对象的创建:使用hashlib模块的相应函数创建哈希对象,例如md5()、…

助力实现更可持续未来的智能解决方案:AI如何改变世界

人工智能已然成为今年的热门话题。由于生成式AI应用的快速采用,新闻头条充斥着有关AI如何彻底改变我们的政策制定、就业和经济走向的预测。您知道AI也是我们应对各种可持续发展挑战的先锋吗?AI通过分析大量数据,并提供有用的见解和工具&#…

【Unity动画系统】Animator组件的属性

介绍Animator组件的全部属性 Controller:动画控制器 Avatar:人物骨骼 Apply Root Motion:有一些动画片段自带位移,如果希望自带的位移应用在游戏对象上,那么就勾选;如果自己编写脚本,那么就不…

Swift 中如何四舍五入

在 Swift 中,你可以使用不同的方法来进行四舍五入操作,具体取决于你的需求和场景。以下是几种常见的方法: round()函数 round()函数可以对浮点数进行四舍五入,并返回最接近的整数。 let number 3.75let roundedNumber round(n…

深度学习和强化学习的区别

深度学习和强化学习是机器学习领域中两个非常重要的研究方向,它们有着不同的应用、原理和目标。虽然这两者可以结合使用(例如在深度强化学习中),但它们的基本概念和方法有着根本的区别。 深度学习(Deep Learning&…

【静态分析】静态分析笔记08 - 指针分析 - 上下文敏感

参考: 【课程笔记】南大软件分析课程8——指针分析-上下文敏感(课时11/12) - 简书 ------------------------------------------------------------------------------------------------------------- 1. 上下文不敏感的问题 说明&#…

C# 图像处理 添加水印

方法1,使用自带的画刷进行绘制水印 示例代码 public partial class Form1 : Form{public Form1(){InitializeComponent();}string photoPathstring.Empty;Bitmap image null;private void button1_Click(object sender, EventArgs e) //选择照片{OpenFileDialog d…

SQL中PIVOT函数的用法

文章目录 前言1. SQL Server2. MySQL3. Oracle 前言 PIVOT 是 SQL Server 中的一个功能,用于将行转换为列。然而,MySQL 和 Oracle 不直接支持 PIVOT 语法。但是,你可以使用条件聚合或其他技术来模拟 PIVOT 的行为。 语法: -- 从子…

设计模式:开放-封闭原则(Open-Closed Principle,OCP)介绍

开放-封闭原则(Open-Closed Principle,OCP)是面向对象设计原则之一,它指导我们编写可扩展和易维护的代码。该原则的核心思想是: 软件实体(类、模块、函数等)应该对扩展开放,对修改封…

Anagrams

描述 Most crossword puzzle(猜字谜) fans are used to anagrams(字谜)--groups of words with the same letters in different orders--for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this att…

【C++】位图

文章目录 1. 位图概念2. 位图的实现3. 位图的应用 1. 位图概念 面试题 给 40 亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这 40 亿个数中。 遍历,时间复杂度 O(N) 排序 O(NlogN),利用二分查找&…

全志ARM-官方库SDK安装和验证

进入界面,输入以下指令 git clone https://github.com/orangepi-xunlong/wiringOP //下载源码 cd wiringOP //进入文件夹 sudo ./build clean //清除编译信息 sudo ./build …

leetCode58. 最后一个单词的长度

leetCode58. 最后一个单词的长度 思路:从末端使用双指针算法 代码 /* 我们采用双指针算法: 从后往前找,第一个指针是最后一个不是空格的字符 第二个指针指向的是前面空格的后一个字符 长度即为 i - j */ class Solution { public:int lengthOfLastWord(…

C++ | Leetcode C++题解之第40题组合总和II

题目&#xff1a; 题解&#xff1a; class Solution { private:vector<pair<int, int>> freq;vector<vector<int>> ans;vector<int> sequence;public:void dfs(int pos, int rest) {if (rest 0) {ans.push_back(sequence);return;}if (pos fr…

前端JS必用工具【js-tool-big-box】,防抖和节流的方法调用学习

这一小节&#xff0c;我们针对前端工具包&#xff08;npm&#xff09;js-tool-big-box的使用做一些讲解&#xff0c;主要是防抖和节流方面的。 目录 前言 1 安装和引入 2 防抖的调用学习 3 节流的调用学习 4 使用方法总结 前言 在前端项目中&#xff0c;经常涉及到防抖…

使用Redis实现延时队列

redis的zset实现延迟队列 延迟队列是什么&#xff1f; 延时队列相比于普通队列最大的区别就体现在其延时的属性上&#xff0c;普通队列的元素是先进先出&#xff0c;按入队顺序进行处理&#xff0c;而延时队列中的元素在入队时会指定一个延迟时间&#xff0c;表示其希望能够在经…

多数据源注解使用

<dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version> </dependency> 1.使用mybatis-plus 如何配置多数据源&#xff0c;application-loc…

vue使用海康控件开发包——浏览器直接查看海康监控画面

1、下载控件开发包 2、安装插件&#xff08;双击/demo/codebase/HCWebSDKPlugin.exe进行安装&#xff09; 3、打开/demo/index.html文件 4、在页面上输入你的海康监控的登录信息进行预览 如果有监控画面则可以进行下面的操作 注意&#xff1a;以下操作都在Vue项目进行 5、复…

静态链接lib库使用

lib库实际上分为两种&#xff0c;一种是静态链接lib库或者叫做静态lib库&#xff0c;另一种叫做动态链接库dll库的lib导入库或称为lib导入库。这两个库是不一样的&#xff0c;很多人都分不清楚&#xff0c;很容易混淆。 第一种是静态lib&#xff0c;包含了所有的代码实现的&am…

android studio集成 百度云推送项目实战 注意事项

onBind errorCode0(成功码) appid8543666(appid后台生成) userId1107752540659249906(用户Id) channelId3723987107990995031 requestId1268411415 1.首先查看应用包名是否一致 2.查看key是否一致 <meta-data android:name“api_key” android:value“KRxGMFpmQkXEgZDGG…