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

Redis数据库与GO(一):安装,string,hash

安装包地址:https://github.com/tporadowski/redis/releases
建议下载zip版本,解压即可使用。解压后,依次打开目录下的redis-server.exe和redis-cli.exe,redis-cli.exe用于输入指令。

一、基本结构

在这里插入图片描述
如图,redis对外有个端口,用户发出的指令都要通过这个端口。redis是在内存中操作的,这是它比别的数据库快的主要原因之一,内存中的结构分为核心组件和数据库,核心组件负责解析指令,存取数据和执行指令。Redis默认有16个数据库,初始默认使用0号库,编号是0…15。内存中的数据库最后存到磁盘中,实现数据持久化。

二、redis的数据类型

Redis的五大数据类型是:String(字符串)、Hash(哈希)、List(列表)、Set(集合)和zset(sorted set:有序集合)
(1)String(字符串):
最基本的类型,一个键对应一个字符串值
可以存储文本、数字、甚至二进制数据(如图片)。
常用操作:
SET key value:设置键的值。
GET key:获取键的值。
INCR key:对存储的数字自增。
(2)Hash(哈希):
键对应一个哈希表,哈希表由字段和字段值组成(类似GO中的map)。
常用操作:
HSET key field value:设置哈希表的字段值。
HGET key field:获取哈希表的字段值。
HGETALL key:获取哈希表中所有字段和值。
(3)List(列表):
键对应一个列表,列表可以从两端进行插入和删除操作。
常用操作:
LPUSH key value:从左侧插入一个值。
RPUSH key value:从右侧插入一个值。
LPOP key:从左侧移除并返回一个值。
(4)Set(集合):
键对应一个无序集合,集合中的元素是唯一的,不允许重复。
常用操作:
SADD key member:向集合添加一个元素。
SREM key member:移除集合中的某个元素。
SMEMBERS key:获取集合中所有元素。
(5)Sorted Set有序集合):
与集合类似,但每个元素都会关联一个分数,根据分数排序
常用操作:
ZADD key score member:向有序集合添加元素和对应的分数。
ZRANGE key start stop:按照分数从低到高返回集合中的元素。
ZREM key member:移除有序集合中的某个元素。

三、string中的CRUD

CRUD是数据库基本操作,其含义如下:
C - Create(创建):插入新记录或创建新数据。
例如:在 MySQL 中,INSERT INTO 是创建数据的常用 SQL 语句。
R - Read(读取):读取数据或查询数据。
例如:SELECT 是读取数据的常用操作。
U - Update(更新):修改现有数据。
例如:UPDATE 用于更新数据库中的记录。
D - Delete(删除):删除数据。
例如:DELETE FROM 用于删除数据。
redis中的string的基本操作语法如下:
1.添加key-val:[set]
2.查看当前redis的所有key:[keys *]
3.获取key:[get key]
4.删除key:[del key]
5.切换redis数据库:[select index]
6.如何查看当前数据库的key-val数量:[dbsize]
7.清空当前数据库的key-val和清空所有数据库的key-val:[flushdb] [flushall]
注意:redis中没有update指令,但能通过set相同的key实现。
实例:

127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get key1
(nil)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> dbsize
(integer) 1
127.0.0.1:6379> set key2 sgg
OK
127.0.0.1:6379> dbsize
(integer) 2
127.0.0.1:6379> set address ᄆᄆᄒᄅ
OK
127.0.0.1:6379> get address
"\xb1\xb1\xbe\xa9"
127.0.0.1:6379> set address beijing
OK
127.0.0.1:6379> get address
"beijing"
127.0.0.1:6379> del address
(integer) 1
127.0.0.1:6379> get address
(nil)

其中set address ᄆᄆᄒᄅ是设置了key的值为“北京”,其在内存中的值为"\xb1\xb1\xbe\xa9"。其中(integer)num,表示操作是否成功或查询的对象数量。

四、string中的setex,mset,mget

SETEX专门用于设置带有过期时间的键值对。它的全称是 “Set EXpire”,表示在设置键的同时定义其生存时间(TTL, Time to Live)。当键的 TTL 到期后,Redis 会自动删除这个键。语法为:SETEX key seconds value,实例如下:

127.0.0.1:6379> setex msg01 10 hello,you
OK
127.0.0.1:6379> get msg01
"hello,you"
127.0.0.1:6379> get msg01
(nil)

这里设置了10秒后删除键msg01,只有在10秒内get才能获取其值。
mset同时设置多个键值对,mget一次获取多个键的值,示例如下:

127.0.0.1:6379> mset worker01 tom worker02 scott
OK
127.0.0.1:6379> get worker02
"scott"
127.0.0.1:6379> mget worker01 worker02
1) "tom"
2) "scott"

五、hash

hash是一个键值对集合,相当于GO中的map:var user1 map[string]string
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
举例,存放一个User信息:

user1 name 张三 age 30

说明:哈希表user1中存放了两对field-value:name 张三和age 30。
hset为哈希表中的字段设置值,hget获取哈希表中特定字段的值,hgetall获取哈希表中的所有字段和值,hlen获取哈希表的键值对个数,hexists查看指定key是否在哈希表中。实例如下:

127.0.0.1:6379> hset user1 name "smith"
(integer) 1
127.0.0.1:6379> hset user1 age 30
(integer) 1
127.0.0.1:6379> hset user1 job "golang coder"
(integer) 1
127.0.0.1:6379> hget user1 name
"smith"
127.0.0.1:6379> hget user1 age
"30"
127.0.0.1:6379> hget user1 job
"golang coder"
127.0.0.1:6379> hgetall user1
127.0.0.1:6379> hmset user2 name jerry age 110 job "java coder"
OK
127.0.0.1:6379> hmget user2 name age job
1) "jerry"
2) "110"
3) "java coder"
127.0.0.1:6379> hlen user2
(integer) 3
127.0.0.1:6379> hexists user2 name
(integer) 1
127.0.0.1:6379> hexists user2 name2
(integer) 0
127.0.0.1:6379> hgetall user2
1) "name"
2) "jerry"
3) "age"
4) "110"
5) "job"
6) "java coder"

练习:存放一个Student信息:
stu1 name 张三 age 30 score 80 address 北京
请通过相关指令,完成对Student的crud操作。
解析:
Create

127.0.0.1:6379> hmset stu1 name zhangsan age 30 score 80 address beijing
OK

Read

127.0.0.1:6379> hgetall stu1
1) "name"
2) "zhangsan"
3) "age"
4) "30"
5) "score"
6) "80"
7) "address"
8) "beijing"

Update

127.0.0.1:6379> hset stu1 name lisi
(integer) 0
127.0.0.1:6379> hgetall stu1
1) "name"
2) "lisi"
3) "age"
4) "30"
5) "score"
6) "80"
7) "address"
8) "beijing"

Delete

127.0.0.1:6379> hdel stu1 age
(integer) 1
127.0.0.1:6379> hgetall stu1
1) "name"
2) "lisi"
3) "score"
4) "80"
5) "address"
6) "beijing"

注意:HSET 的返回值并不表示值是否更新,而是表示字段是否是新插入的。如果字段是新插入的,返回 (integer) 1。如果字段已经存在(无论值是否改变),返回 (integer) 0。

相关文章:

Redis数据库与GO(一):安装,string,hash

安装包地址:https://github.com/tporadowski/redis/releases 建议下载zip版本,解压即可使用。解压后,依次打开目录下的redis-server.exe和redis-cli.exe,redis-cli.exe用于输入指令。 一、基本结构 如图,redis对外有个…...

expressjs,实现上传图片,返回图片链接

在 Express.js 中实现图片上传并返回图片链接,你通常需要使用一个中间件来处理文件上传,比如 multer。multer 是一个 node.js 的中间件,用于处理 multipart/form-data 类型的表单数据,主要用于上传文件。 以下是一个简单的示例&a…...

爬虫——XPath基本用法

第一章XML 一、xml简介 1.什么是XML? 1,XML指可扩展标记语言 2,XML是一种标记语言,类似于HTML 3,XML的设计宗旨是传输数据,而非显示数据 4,XML标签需要我们自己自定义 5,XML被…...

常见排序算法汇总

排序算法汇总 这篇文章说明下排序算法,直接开始。 1.冒泡排序 最简单直观的排序算法了,新手入门的第一个排序算法,也非常直观,最大的数字像泡泡一样一个个的“冒”到数组的最后面。 算法思想:反复遍历要排序的序列…...

Golang | Leetcode Golang题解之第459题重复的子字符串

题目&#xff1a; 题解&#xff1a; func repeatedSubstringPattern(s string) bool {return kmp(s s, s) }func kmp(query, pattern string) bool {n, m : len(query), len(pattern)fail : make([]int, m)for i : 0; i < m; i {fail[i] -1}for i : 1; i < m; i {j : …...

0.计网和操作系统

0.计网和操作系统 熟悉计算机网络和操作系统知识&#xff0c;包括 TCP/IP、UDP、HTTP、DNS 协议等。 常见的页面置换算法&#xff1a; 先进先出&#xff08;FIFO&#xff09;算法&#xff1a;将最早进入内存的页面替换出去。最近最少使用&#xff08;LRU&#xff09;算法&am…...

探索Prompt Engineering:开启大型语言模型潜力的钥匙

前言 什么是Prompt&#xff1f;Prompt Engineering? Prompt可以理解为向语言模型提出的问题或者指令&#xff0c;它是激发模型产生特定类型响应的“触发器”。 Prompt Engineering&#xff0c;即提示工程&#xff0c;是近年来随着大型语言模型&#xff08;LLM&#xff0c;Larg…...

滚雪球学Oracle[3.3讲]:数据定义语言(DDL)

全文目录&#xff1a; 前言一、约束的高级使用1.1 主键&#xff08;Primary Key&#xff09;案例演示&#xff1a;定义主键 1.2 唯一性约束&#xff08;Unique&#xff09;案例演示&#xff1a;定义唯一性约束 1.3 外键&#xff08;Foreign Key&#xff09;案例演示&#xff1a…...

ssrf学习(ctfhub靶场)

ssrf练习 目录 ssrf类型 漏洞形成原理&#xff08;来自网络&#xff09; 靶场题目 第一题&#xff08;url探测网站下文件&#xff09; 第二关&#xff08;使用伪协议&#xff09; 关于http和file协议的理解 file协议 http协议 第三关&#xff08;端口扫描&#xff09…...

ElasticSearch之网络配置

对官方文档Networking的阅读笔记。 ES集群中的节点&#xff0c;支持处理两类通信平面 集群内节点之间的通信&#xff0c;官方文档称之为transport layer。集群外的通信&#xff0c;处理客户端下发的请求&#xff0c;比如数据的CRUD&#xff0c;检索等&#xff0c;官方文档称之…...

【C语言进阶】系统测试与调试

1. 引言 在开始本教程的深度学习之前&#xff0c;我们需要了解整个教程的目标及其结构&#xff0c;以及为何进阶学习是提升C语言技能的关键。 目标和结构&#xff1a; 教程目标&#xff1a;本教程旨在通过系统化的学习&#xff0c;从单元测试、系统集成测试到调试技巧&#xf…...

多个单链表的合成

建立两个非递减有序单链表&#xff0c;然后合并成一个非递增有序的单链表。 注意&#xff1a;建立非递减有序的单链表&#xff0c;需要采用创建单链表的算法 输入格式: 1 9 5 7 3 0 2 8 4 6 0 输出格式: 9 8 7 6 5 4 3 2 1 输入样例: 在这里给出一组输入。例如&#xf…...

『建议收藏』ChatGPT Canvas功能进阶使用指南!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

Ollama 运行视觉语言模型LLaVA

Ollama的LLaVA&#xff08;大型语言和视觉助手&#xff09;模型集已更新至 1.6 版&#xff0c;支持&#xff1a; 更高的图像分辨率&#xff1a;支持高达 4 倍的像素&#xff0c;使模型能够掌握更多细节。改进的文本识别和推理能力&#xff1a;在附加文档、图表和图表数据集上进…...

gdb 调试 linux 应用程序的技巧介绍

使用 gdb 来调试 Linux 应用程序时&#xff0c;可以显著提高开发和调试的效率。gdb&#xff08;GNU 调试器&#xff09;是一款功能强大的调试工具&#xff0c;适用于调试各类 C、C 程序。它允许我们在运行程序时检查其状态&#xff0c;设置断点&#xff0c;跟踪变量值的变化&am…...

Java项目实战II基于Java+Spring Boot+MySQL的房产销售系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着房地产市场的蓬勃发展&#xff0c;房产销售业务日益复杂&#xff0c;传统的手工管理方式已难以满…...

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容&#xff1a; 使用AWS CLI配置密钥对创建ec2 server使用drawio&#xff08;vscode插件&#xff09;进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台&#xff0c;可以提供ec2&#xff0c;vpc&#xff0c;SNS以及clo…...

【Python】Eventlet 异步网络库简介

Eventlet 是一个 Python 的异步网络库&#xff0c;它使用协程&#xff08;green threads&#xff09;来简化并发编程。通过非阻塞的 I/O 操作&#xff0c;Eventlet 使得你可以轻松编写高性能的网络应用程序&#xff0c;而无需处理复杂的回调逻辑或编写多线程代码。它广泛应用于…...

【JNI】数组的基本使用

在上一期讲了基本类型的基本使用&#xff0c;这期来说一说数组的基本使用 HelloJNI.java&#xff1a;实现myArray函数&#xff0c;把一个整型数组转换为双精度型数组 public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloW…...

React跨平台

React的跨平台应用开发详解如下&#xff1a; 一、跨平台能力 React本身是一个用于构建用户界面的JavaScript库&#xff0c;但它通过React Native等框架实现了跨平台应用开发的能力。React Native允许开发者使用JavaScript和React来编写原生应用&#xff0c;这些应用可以在iOS和…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

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

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

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...