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题重复的子字符串
题目: 题解: 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.计网和操作系统 熟悉计算机网络和操作系统知识,包括 TCP/IP、UDP、HTTP、DNS 协议等。 常见的页面置换算法: 先进先出(FIFO)算法:将最早进入内存的页面替换出去。最近最少使用(LRU)算法&am…...
探索Prompt Engineering:开启大型语言模型潜力的钥匙
前言 什么是Prompt?Prompt Engineering? Prompt可以理解为向语言模型提出的问题或者指令,它是激发模型产生特定类型响应的“触发器”。 Prompt Engineering,即提示工程,是近年来随着大型语言模型(LLM,Larg…...
滚雪球学Oracle[3.3讲]:数据定义语言(DDL)
全文目录: 前言一、约束的高级使用1.1 主键(Primary Key)案例演示:定义主键 1.2 唯一性约束(Unique)案例演示:定义唯一性约束 1.3 外键(Foreign Key)案例演示:…...
ssrf学习(ctfhub靶场)
ssrf练习 目录 ssrf类型 漏洞形成原理(来自网络) 靶场题目 第一题(url探测网站下文件) 第二关(使用伪协议) 关于http和file协议的理解 file协议 http协议 第三关(端口扫描)…...
ElasticSearch之网络配置
对官方文档Networking的阅读笔记。 ES集群中的节点,支持处理两类通信平面 集群内节点之间的通信,官方文档称之为transport layer。集群外的通信,处理客户端下发的请求,比如数据的CRUD,检索等,官方文档称之…...
【C语言进阶】系统测试与调试
1. 引言 在开始本教程的深度学习之前,我们需要了解整个教程的目标及其结构,以及为何进阶学习是提升C语言技能的关键。 目标和结构: 教程目标:本教程旨在通过系统化的学习,从单元测试、系统集成测试到调试技巧…...
多个单链表的合成
建立两个非递减有序单链表,然后合并成一个非递增有序的单链表。 注意:建立非递减有序的单链表,需要采用创建单链表的算法 输入格式: 1 9 5 7 3 0 2 8 4 6 0 输出格式: 9 8 7 6 5 4 3 2 1 输入样例: 在这里给出一组输入。例如…...
『建议收藏』ChatGPT Canvas功能进阶使用指南!
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...
Ollama 运行视觉语言模型LLaVA
Ollama的LLaVA(大型语言和视觉助手)模型集已更新至 1.6 版,支持: 更高的图像分辨率:支持高达 4 倍的像素,使模型能够掌握更多细节。改进的文本识别和推理能力:在附加文档、图表和图表数据集上进…...
gdb 调试 linux 应用程序的技巧介绍
使用 gdb 来调试 Linux 应用程序时,可以显著提高开发和调试的效率。gdb(GNU 调试器)是一款功能强大的调试工具,适用于调试各类 C、C 程序。它允许我们在运行程序时检查其状态,设置断点,跟踪变量值的变化&am…...
Java项目实战II基于Java+Spring Boot+MySQL的房产销售系统(源码+数据库+文档)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 随着房地产市场的蓬勃发展,房产销售业务日益复杂,传统的手工管理方式已难以满…...
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
aws(学习笔记第一课) 使用AWS CLI 学习内容: 使用AWS CLI配置密钥对创建ec2 server使用drawio(vscode插件)进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台,可以提供ec2,vpc,SNS以及clo…...
【Python】Eventlet 异步网络库简介
Eventlet 是一个 Python 的异步网络库,它使用协程(green threads)来简化并发编程。通过非阻塞的 I/O 操作,Eventlet 使得你可以轻松编写高性能的网络应用程序,而无需处理复杂的回调逻辑或编写多线程代码。它广泛应用于…...
【JNI】数组的基本使用
在上一期讲了基本类型的基本使用,这期来说一说数组的基本使用 HelloJNI.java:实现myArray函数,把一个整型数组转换为双精度型数组 public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloW…...
React跨平台
React的跨平台应用开发详解如下: 一、跨平台能力 React本身是一个用于构建用户界面的JavaScript库,但它通过React Native等框架实现了跨平台应用开发的能力。React Native允许开发者使用JavaScript和React来编写原生应用,这些应用可以在iOS和…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
