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,一经查实,立即删除!

相关文章

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

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

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

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

【静态分析】静态分析笔记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…

【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 …

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;经常涉及到防抖…

多数据源注解使用

<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…

Centos 5 的yum源

背景 有使用较老的Centos 5 系统内部安装软件无法正常报错&#xff0c;是由于系统叫老yum源存在问题 处理方法 更换下述yum源&#xff0c;可以将其他repo源文件备份移动到其他目录&#xff0c;添加下述源后重新测试 [C5.11-base] nameCentOS-5.11 baseurlhttp://vault.c…

Jackson 2.x 系列【31】Spring Boot 集成之字典回写

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 场景描述2. 案例演示2.1 修改枚举2.2 定义注解…

Gitflow实操以及代码审查Pull Request操作

1.背景 之前一直有用过gitflow&#xff0c;但是一直没有归纳技术&#xff0c;另一方面也是每个团队用到的gitflow都不一致。而最近做项目要用gitflow&#xff0c;趁此机会分享一下gitflow的操作。 2.gitflow介绍 用git一直有一个问题&#xff0c;就是怎么保证代码稳定性&…

服务器如何开启远程连接?

服务器开启远程连接是网络管理中一项重要的功能。通过远程连接&#xff0c;用户可以在任何地方远程访问服务器&#xff0c;从而进行管理、维护和监控等操作。远程连接的开启可以为工作提供便利性和效率&#xff0c;但同时也带来了安全风险。确保远程连接的安全性和可靠性是至关…

RPC的介绍和架构发展

RPC概念&#xff1a; RPC是远程过程调用协议&#xff0c;是一种不需要了解底层网络技术&#xff0c;调用远程计算机服务。 RPC框架的组成&#xff1a; 图1 当总项目的数据量、访问量不断提高&#xff0c;就把他分成多个服务&#xff0c;减轻单体机器的压力。分开的ABC服务之…

python高阶函数:zip()

概述与基本用法 zip() 是 Python 内置函数之一&#xff0c;用于将多个可迭代对象打包成一个元组序列&#xff0c;然后返回一个迭代器。它可以接受任意数量的可迭代对象作为参数&#xff0c;并将它们的元素按顺序一一对应地打包成元组。 以下是 zip() 函数的基本用法&#xff…

【前端】vue3树形组件使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、树形组件简介二、树形组件使用三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人学习使用vue前端工具&#xff0c;本文主要介…

iOS - 多线程-GCD-队列组

文章目录 iOS - 多线程-GCD-队列组1. 队列组1.1 基本使用步骤 iOS - 多线程-GCD-队列组 开发过程中&#xff0c;有时候想实现这样的效果 多个任务并发执行所有任务执行完成后&#xff0c;进行下一步处理&#xff08;比如回到主线程刷新UI&#xff09; 1. 队列组 可以使用GC…