当前位置: 首页 > 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和…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

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

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

Rust 异步编程

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

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

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