当前位置: 首页 > news >正文

Go 语言访问 Redis 笔记

文章目录

  • Mac 下载 Redis
  • Mac Redix 数据库打开
    • 服务端
    • 客户端
  • 导包
  • 连接数据库
  • 操作字符串
  • 操作 Hash
  • 设置过期时间
  • 队列操作
  • 连接池
  • 并发操作
  • 管道化操作
  • 事务操作

Mac 下载 Redis

Mac安装Redis,原来就是这么简单

Mac Redix 数据库打开

  • brew services start redis

服务端

  • redis-server

客户端

  • redis-cli

导包

package mainimport ("fmt""github.com/gomodule/redigo/redis"
)

连接数据库

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

操作字符串

// 获取字符串
func getString(c redis.Conn) {res, err := redis.String(c.Do("Get", "username"))if err != nil {fmt.Println(err)return}fmt.Println(res)
}// 设置字符串
func setString(c redis.Conn) {_, err := c.Do("Set", "username", "jack")if err != nil {fmt.Println(err)return}
}// 批量设置字符串
func setStrings(c redis.Conn) {_, err := c.Do("MSet", "username", "jack", "phone", "188888888")if err != nil {fmt.Println("MSet error:", err)return}
}// 批量获取字符串
func getStrings(c redis.Conn) {res2, err := redis.Strings(c.Do("MGet", "username", "phone"))if err != nil {fmt.Println("MGet error:", err)return}fmt.Println(res2)
}

操作 Hash

// redis Hash 操作 设置
func setHash(c redis.Conn) {_, err := c.Do("HSet", "names", "jim", "barry")if err != nil {fmt.Println("hset error: ", err)return}
}// redis Hash 操作 获取
func getHash(c redis.Conn) {res3, err := redis.String(c.Do("HGet", "names", "jim"))if err != nil {fmt.Println("hget error: ", err)return}fmt.Println(res3)
}

设置过期时间

// redis 设置过期时间
func setExpire(c redis.Conn) {_, err := c.Do("expire", "names", "10")if err != nil {fmt.Println("expire err: ", err)}
}

队列操作

// redis 队列
func queueOpr(c redis.Conn) {//入队列_, err := c.Do("lpush", "Queue", "jim", "barry", 9)if err != nil {fmt.Println("lpush error:", err)return}//出队列for true {r, err := redis.String(c.Do("lpop", "Queue"))if err != nil {fmt.Println("lpop error: ", err)return}fmt.Println(r)}//获取队列长度res4, err := redis.Int(c.Do("llen", "Queue"))if err != nil {fmt.Println("llen error: ", err)return}fmt.Println(res4)
}

连接池

// 使用 Pool 初始化连接池
var pool *redis.Poolfunc init() {pool = &redis.Pool{MaxActive:   1024,MaxIdle:     16,IdleTimeout: 300,Dial: func() (redis.Conn, error) {return redis.Dial("tcp", "localhost:6379")},}
}func main() {c := pool.Get()defer c.Close()_, err := c.Do("Set", "username", "jack")if err != nil {fmt.Println(err)return}r, err := redis.String(c.Do("Get", "username"))if err != nil {fmt.Println(err)return}fmt.Println(r)
}

并发操作

//redis并发实例
func main() {conn, err := redis.Dial("tcp", "localhost:6379")if err != nil {fmt.Println("connect redis error:", err)return}defer conn.Close()conn.Send("HSET", "students", "name", "jim", "age", "19")conn.Send("HSET", "students", "score", "100")conn.Send("HSET", "students", "age")conn.Flush()res1, err := conn.Receive()fmt.Printf("Receive res1:%v \n", res1)res2, err := conn.Receive()fmt.Printf("Receive res2:%v \n", res2)res3, err := conn.Receive()fmt.Printf("Receive res3:%v \n", res3)
}

管道化操作

//redis管道化操作
func main() {c, err := redis.Dial("tcp", "localhost:6379")if err != nil {fmt.Println("conn redis failed,err:", err)return}defer c.Close()c.Send("SET", "username1", "jim")c.Send("SET", "username2", "jack")c.Flush()v, err := c.Receive()fmt.Printf("v:%v,err:%v\n", v, err)v, err = c.Receive()fmt.Printf("v:%v,err:%v\n", v, err)v, err = c.Receive()fmt.Printf("v:%v,err:%v\n", v, err)
}

事务操作

// redis事务操作
func main() {conn, err := redis.Dial("tcp", "localhost:6379")if err != nil {fmt.Println("connect redis error:", err)return}defer conn.Close()conn.Send("MULTI")conn.Send("INCR", "Foo")conn.Send("INCR", "bar")r, err := conn.Do("EXEC")fmt.Println(r)
}
  • 有几个 redis 库,但一般用 “github.com/go-redis/redis/v8” --wilinzz

相关文章:

Go 语言访问 Redis 笔记

文章目录 Mac 下载 RedisMac Redix 数据库打开服务端客户端 导包连接数据库操作字符串操作 Hash设置过期时间队列操作连接池并发操作管道化操作事务操作 Mac 下载 Redis Mac安装Redis,原来就是这么简单 Mac Redix 数据库打开 brew services start redis 服务端 …...

【MySQL数据库重点】第二节:MySQL基础知识(基本操作)

目录 一:数据库的操作 1.显示数据库 2.创建数据库 3.使用数据库 4.删除数据库 二:常用数据类型 1.数值类型:整型和浮点型 2.字符串类型 3.日期类型 三:表的操作 1.查看表结构 2.创建表 3.删除表 一:数据库…...

计算机网络--第一次作业

1、比较电路交换、报文交换和分组报文交换优缺点 电路交换 电路交换是以电路连接为目的的交换方式,通信之前要在通信双方之间建立一条被双方独占的物理通道(由通信双方之间的交换设备和链路逐段连接而成)。 优点: ①由于通信线路为…...

网络协议--TCP的成块数据流

20.1 引言 在第15章我们看到TFTP使用了停止等待协议。数据发送方在发送下一个数据块之前需要等待接收对已发送数据的确认。本章我们将介绍TCP所使用的被称为滑动窗口协议的另一种形式的流量控制方法。该协议允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必…...

鼎鑫鸿鄴引入“能源互联网+”理念 打造共赢

近年来,随着全球能源消耗的不断增长和环境问题的日益突出,清洁能源转型成为全球共同关注的话题。中国作为全球最大的能源消费国,也在积极推动能源结构的优化和清洁能源的发展。鼎鑫鸿鄴新能源科技有限公司在推动清洁能源转型方面制定了一系列…...

Qt下实现支持多线程的单例模式

Qt下实现支持多线程的单例模式 Chapter1 Qt下实现支持多线程的单例模式($$$)1. 代码介绍2. 代码之路3. 详细分析3.1 什么是单例3.2 如何让类无法实例化3.3 如何调用这个唯一实例3.4 如何支持多线程3.5 如何解决内存泄漏 4. 结束语 Chapter2 Qt 全局单例类Chapter3 Qt实用技巧&a…...

基于Java的宠物商店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...

ArcGIS中批量mxd高版本转低版本

我们经常在给别人发ArcGIS的工程文件mxd,结果到别人那发现mxd工程文件打不开,原因是我们的arcgis版本高于别人,此时工程文件又很多,一个个转存成低版本又嫌麻烦,于是我们做了个批量mxd高版本转低版本的小工具&#xff…...

三篇论文:速览GPT在网络安全最新论文中的应用案例

GPT在网络安全领域的应用案例 写在最前面论文1:Chatgpt/CodeX引入会话式 APR 范例利用验证反馈LLM 的长期上下文窗口:更智能的反馈机制、更有效的信息合并策略、更复杂的模型结构、鼓励生成多样性和GPT类似的步骤:Conversational APR 对话式A…...

美术如何创建 skybox 贴图资源?

文章目录 目的PS手绘Panorama To CubemapPS手绘Pano2VRSkybox & Cubemap Tutorial (Maya & Photoshop)Unity 中使用 ReflectionProbe 生成 Cubemap 然后再 PS 调整PS直接手绘 cubemapBlender 导入 Panorama,然后烘焙到 cubemap,再导入unity中使用…...

【Linux 用户,用户组管理】

文章目录 什么是Linux用户和用户组用户(User)用户组(User Group) Linux用户和用户组管理命令1. 创建用户2. 删除用户3. 修改用户信息4. 创建用户组5. 将用户添加到用户组6. 用户和用户组的查询 用户和用户组管理实战 什么是Linux用…...

VS2022 C# 读取 excel 2023年

今天是2023年6月26日,我有一个excel表要读数据,然后放到winform程序来处理,网上的资料太旧,很多用不起来,试了一个可以使用,记录一下: 一、excel文件后缀需要小写。 二、用VS2022建一个winform…...

C# | Chaikin算法 —— 计算折线对应的平滑曲线坐标点

Chaikin算法——计算折线对应的平滑曲线坐标点 本文将介绍一种计算折线对应的平滑曲线坐标点的算法。该算法使用Chaikin曲线平滑处理的方法,通过控制张力因子和迭代次数来调整曲线的平滑程度和精度。通过对原始点集合进行切割和插值操作,得到平滑的曲线坐…...

day44

什么是前端 前端是所有跟用户直接打交道的都可以称之为是前端 比如:pc页面、手机页面、平板页面、汽车显示屏等等显示出来的都是前端内容 什么是后端? 就是一堆代码,用户不能够直接看到,不直接与用户打交道的都是后端 常见的后端…...

python常用操作汇总

python创建二维数组 python创建三行三列的二维数组,下面方法是错误的,因为是浅拷贝: lst1 [0] * 3 lst2 [lst1] * 3 lst2[1][1] 2 print(lst2) # [[0, 2, 0], [0, 2, 0], [0, 2, 0]]正确姿势 lst [[0 for j in range(3)] for i in ran…...

赴日IT培训 日本IT行业为啥吃香?

确实现在有许多小伙伴尝到了赴日IT的甜头,可是去日本从事IT行业真的很简单吗?为什么日本的IT行业这么缺人呢?那今天小编就跟大家聊一聊日本的IT行业。 咱们先来说说日本的IT行业为什么缺人?其实不只是IT行业,可以说日…...

2016年亚太杯APMCM数学建模大赛A题基于光学信息数据的温度及关键元素含量预测求解全过程文档及程序

2016年亚太杯APMCM数学建模大赛 A题 基于光学信息数据的温度及关键元素含量预测 原题再现 光含有能量,在一定条件下可以转化为热。燃烧是一种常见的现象,既能发光又能发热。光和热通常是同时存在的,一般来说,光强度越高&#xf…...

一文讲明:企业知识库的作用和搭建方法

在现代商务环境中,企业面临着大量的信息和知识流动。这些信息和知识散落在各个部门、团队甚至个人之间,难以进行有效的整合和利用。而企业知识库的出现解决了这一问题。它提供了一个统一的平台,将分散的信息汇聚到一个集中的数据库中&#xf…...

技术的新浪潮:从SOCKS5代理到跨界电商的未来

在当今这个日新月异的技术时代,各种创新技术如雨后春笋般涌现。从SOCKS5代理到跨界电商,再到爬虫技术、出海战略和游戏产业的飞速发展,我们正处于一个技术变革的黄金时代。 SOCKS5代理:安全的网络通道 SOCKS5代理是一种网络协议…...

Android intent的一些小使用

目录: 1. Test5.java2. activity_main5.xml3. Empty.java (这个是用来带参数打开Activity按钮用的)4. activity_empty.xml5. 总结 一些基本的问题就不进行说明了,直接上代码!!! // 最后的隐形intent和带返回值没有解决…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...