go学习part21 Redis和Go(2)

news2024/11/17 21:17:13

 1.三方库安装

309_尚硅谷_Go连接到Redis_哔哩哔哩_bilibili

借鉴:

 Golang 安装 Redis_go fiber 安装redis_柒柒伍贰玖。的博客-CSDN博客

 三方redis库已经迁移到以下网址,go get github.com/gomodule/redigo/redis

gomodule/redigo: Go client for Redis (github.com)

注意下载的文件是在GOPATH/src下面,而不是在GOPATH下。

2.连接redis,Get/Set操作String

1)连接

必须提前控制台运行redis

package main

import (
	"fmt"

	"github.com/gomodule/redigo/redis" //"github.com/garyburd/redigo/redis" //弃用
)

func main() {
	//通过go向redis写入和读取数据
	//1.链接redis(协议,发送ip:端口)
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		fmt.Println("redis.Dial err=", err)
		return
	}
	fmt.Println("连接成功", conn)
	defer conn.Close()
}

 输出套接字

tips:redis.Dial err= dial tcp [::1]:6379: connectex: No connection could be made because the target machine actively refused it.

多半是因为没有提前打开redis。

想要链接redis,必须提前运行redis

Could not connect to redis connection refused - Fix it easily (bobcares.com)

2)Set

	//2.通过go向redis写入数据 string [key,val]
	_, err = conn.Do("Set", "name", "tom猫")
	if err != nil {
		fmt.Println("Set err=", err)
		return
	}
	fmt.Println("set成功")

3)Get

package main

import (
	"fmt"

	"github.com/gomodule/redigo/redis" //"github.com/garyburd/redigo/redis" //弃用
)

func main() {
	//通过go向redis写入和读取数据
	//1.链接redis(协议,发送ip:端口)
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		fmt.Println("redis.Dial err=", err)
		return
	}
	fmt.Println("连接成功", conn)
	defer conn.Close()

	//2.通过go向redis写入数据 string [key,val]
	_, err = conn.Do("Set", "name", "tom猫")
	if err != nil {
		fmt.Println("Set err=", err)
		return
	}
	fmt.Println("set成功")

	//3.通过go向redis读取数据 string [key,val]
	r, err := redis.String(conn.Do("Get", "name"))
	if err != nil {
		fmt.Println("Get err=", err)
		return
	}
	//返回r是interface{}类型,需要断言string
	//nameString := r.(string)//这样不好,用内置方法redis.String
	fmt.Println("get成功 r =", r)
}

3.操作hash

基本就是把上面的string操作, 换一个指令

 1)单个hget/hset

package main

import (
	"fmt"

	"github.com/gomodule/redigo/redis" //"github.com/garyburd/redigo/redis" //弃用
)

func main() {
	//通过go向redis写入和读取数据
	//1.链接redis(协议,发送ip:端口)
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		fmt.Println("redis.Dial err=", err)
		return
	}
	fmt.Println("连接成功", conn)
	defer conn.Close()

	//2.通过go向redis写入数据 string [key,val]
	_, err = conn.Do("HSet", "user01", "name", "john")
	if err != nil {
		fmt.Println("hSet err=", err)
		return
	}
	_, err = conn.Do("HSet", "user01", "age", 18)
	if err != nil {
		fmt.Println("hSet err=", err)
		return
	}
	fmt.Println("hset成功")

	//3.通过go向redis读取数据 string [key,val]
	r1, err := redis.String(conn.Do("HGet", "user01", "name"))
	if err != nil {
		fmt.Println("hGet err=", err)
		return
	}
	r2, err := redis.String(conn.Do("HGet", "user01", "age"))
	if err != nil {
		fmt.Println("hGet err=", err)
		return
	}
	//返回r是interface{}类型,需要断言string
	//nameString := r.(string)//这样不好,用内置方法redis.String
	fmt.Println("hget成功 r1 =", r1, " r2 =", r2)
}

2)批量hmget/hmset

package main

import (
	"fmt"

	"github.com/gomodule/redigo/redis" //"github.com/garyburd/redigo/redis" //弃用
)

/*批量hash*/
func main() {
	//通过go向redis写入和读取数据
	//1.链接redis(协议,发送ip:端口)
	conn, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		fmt.Println("redis.Dial err=", err)
		return
	}
	fmt.Println("连接成功", conn)
	defer conn.Close()

	//2.通过go向redis写入数据 string [key,val]
	_, err = conn.Do("HMSet", "user02", "name", "john", "age", 19)
	if err != nil {
		fmt.Println("hSet err=", err)
		return
	}
	fmt.Println("hset成功")

	//3.通过go向redis读取数据 string [key,val]
	//取一个用户的多个属性
	r, err := redis.Strings(conn.Do("HMGet", "user02", "name", "age"))
	if err != nil {
		fmt.Println("hGet err=", err)
		return
	}
	fmt.Println(r) // 切片
	for i, k := range r {
		fmt.Printf("r[%v]=%v \n", i, k)
	}

}

3)给数据设置有效时间

 

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

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

相关文章

【前端学习记录】neffos插件与控制台交互

背景 最近项目上有个需求需要用到websocket,于是就学了一下关于websocket的使用方法。不过由于后台使用的框架限制,需要前后端一起使用neffos插件,中间踩了很多的坑,这里简单记录一下。 websocket WebSocket 是一种在客户端和服…

计算机视觉-YOYO-

目录 计算机视觉-YOYO 目标检测发展历程 区域卷积神经网络(R-CNN) Fast R-CNN Mask R-CNN模型 比如SSD、YOLO(1, 2, 3)、R-FCN 目标检测基础概念 边界框、锚框和交并比 边界框(bounding box) 锚框(Anchor box) 交并比 …

win10 ping不通 Docker ip(解决截图)

背景: win10下载了docker desktop就是这个图,然后计划做一个springboot连接docker。 docker部署springboot :docker 部署springboot(成功、截图)_總鑽風的博客-CSDN博客 问题:spring boot部署docker后,docker接口通了&#xff0…

并发编程的故事——Java线程

Java线程 文章目录 Java线程一、线程创建二、线程运行三、线程运行四、主线程和守护线程五、线程的五种状态六、线程的六种状态七、烧水泡茶案例 一、线程创建 创建线程方法一: Thread重写run方法 Slf4j(topic "c.MyTest1") public class MyTest1 {publ…

Linux系统Ubuntu配置Docker详细流程

本文介绍在Linux操作系统Ubuntu的18.04及以上版本中,配置开源容器化平台和工具集Docker的详细方法;其中,我们以配置Docker平台的核心组件之一——Docker Engine为例来详细介绍。 首先,大家需要明确,我们常说的Docker&a…

设计模式-原型模式详解

文章目录 前言理论基础1. 原型模式定义2. 原型模式角色3. 原型模式工作过程4. 原型模式的优缺点 实战应用1. 原型模式适用场景2. 原型模式实现步骤3. 原型模式与单例模式的区别 原型模式的变体1. 带有原型管理器的原型模式2. 懒汉式单例模式的原型模式实现3. 细粒度原型模式 总…

敏捷开发要点

敏捷开发是一种以人为核心,迭代、增量式的软件开发方法。它强调团队成员的自我管理、面对变化时的快速适应能力,以及持续的沟通和协作。 以下是敏捷开发的几个要点: 敏捷宣言:敏捷开发遵循敏捷宣言,其中包括四个价值声…

Java单元测试及常用语句 | 京东物流技术团队

1 前言 编写Java单元测试用例,即把一段复杂的代码拆解成一系列简单的单元测试用例,并且无需启动服务,在短时间内测试代码中的处理逻辑。写好Java单元测试用例,其实就是把“复杂问题简单化,建单问题深入化“。在编写的…

stm32CubeMX HAL W5500芯片介绍 第一章

W5500芯片介绍 文章目录 W5500芯片介绍简单简绍以太网以太网分五层:第一层物理层:第二层:数据链路层:第三层:网络层:第四层:传输层:第五层:应用层:以太网应用…

redis面试题二

redis如何处理已过期的元素 常见的过期策略 定时删除:给每个键值设置一个定时删除的事件,比如有一个key值今天5点过期,那么设置一个事件5点钟去执行,把它数据给删除掉(优点:可以及时利用内存及时清除无效数…

《存储IO路径》专题:IO块设备的创建

今天我们来一起学习一下Linux块设备层。它就像是一位大厨,为我们准备各种数据的饕餮盛宴。这个大厨非常厉害,不仅能够读取和写入数据,还能对数据进行各种复杂的操作,比如切割、合并、复制等等。那么,块设备层是如何实现…

C#-抽象类与接口

文章目录 一、抽象类和接口总结总结补充说明主要区别 二、抽象类2.1 抽象类概述与声明2.2 抽象方法2.3 抽象类与抽象方法的使用 三、接口3.1 接口概述概述特征声明示例 3.2 接口的实现和继承说明示例 3.3 显式接口成员实现说明注意示例 一、抽象类和接口总结 总结 抽象类和接…

k8s使用ECK(2.4)形式部署elasticsearch+kibana-http协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、准备elasticsearch-cluster.yaml二、部署并测试总结 前言 之前写了eck2.4部署eskibana,默认的话是https协议的,这里写一个使用http…

【docker】docker的一些常用命令-------从小白到大神之路之学习运维第92天

目录 一、安装docker-ce 1、从阿里云下载docker-cer.epo源 2、下载部分依赖 3、安装docker 二、启用docker 1、启动docker和不启动查看docker version 2、启动服务查看docker version 有什么区别?看到了吗? 3、看看docker启动后的镜像仓库都有什…

解密Spring MVC异常处理:从局部到全局,打造稳固系统的关键步骤

😀前言 在现代软件开发中,异常处理是不可或缺的一部分,它能够有效地提高系统的稳定性和健壮性。在Spring MVC框架中,异常处理机制起着至关重要的作用,它允许开发者在程序运行过程中捕获、处理和报告异常,从…

26 Linux高级篇-Linux面试题

26 Linux高级篇-Linux面试题 文章目录 26 Linux高级篇-Linux面试题1.分析日志t.txt(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排序(腾讯)2.统计连接到服务器的各个ip情况,并按连接数从大到小排序(腾讯)3.如忘记了mys…

历时3天的springboot+vue打包成jar包

有人说问什么打包花了三天,里面的坑很多,我就先不叙述太多,直接说我搞了三天得出来的最后解决方案,不一定适合每一个人!! # 前端 # 修改prod.env.js文件下的内容,把里面的 BASE_API 修改为和dev.env.js文件…

[管理与领导-63]:IT基层管理者 - 潜技能 - 1 - 职场中的陷阱 - 看清楚职场中的霸凌现象

目录 前言: 1:打击自尊心 2:孤立他人 3:恶意针对 4:当众羞辱 5:持续性否定 前言: 职场中,什么样的人都有。 害人之心不可有,防人之心不可无。 前者教人从善&…

顺序栈(数组形式)的实现

🌈什么是栈? 1.抽象化具象:可以理解为一个细长的乒乓球筒,一端封闭,放球只能从另一端放入球,取出球时也只能从该端取出。先进的球最后出,后进的球最先出。 2.定义:栈是一种线性数据…

【C++】map/multimap容器

1.map基本概念 2.map构造和赋值 #include <iostream> using namespace std;//map容器 构造和赋值 #include<map>//遍历输出map容器 void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it m.begin(); it ! m.end(); it)…