数据库Redis(二):基本数据类型
Redis中采用Key-Value键值对的形式将数据存储在数据库中,首先介绍Redis中针对键Key的操作命名。
Redis键Key相关命令
# 查看当前库所有key
keys * # 判断某个key是否存在
exists <key> # 查看你的key是什么类型
type <key> # 删除指定的key数据
del <key> # 根据value选择非阻塞删除,将key从keyspace元数据中删除,真正的删除在后续异步操作。
unlink <key> # 为指定的key设置过期时间,n秒钟后过期
expire <key> <n> # 查看指定的key还有多少秒过期,-1永不过期,-2已过期
ttl <key> # 切换数据库
select <num> # 查看当前数据库的key的数量
dbsize # 清空当前库
flushdb # 清空所有库
flushall
Redis中提供了五种基本数据类型,字符串String、列表List、集合Set、哈希Hash、有序集合ZSet。
字符串String
String是Redis中最基本的数据类型,是二进制安全的,可以包含任何能够转化成字符串的数据,如JPG图片、序列化对象等。一个字符串value最多存储512M。
String的数据结构为简单动态字符串,可以自由修改,在内部结构实现上类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。
常用操作命令
# 添加键值对
set <key> <value> # 只有key不存在时,设置key的值
setnx <key> <value> # 设置key-value的同时设置过期时间
setex <key> <过期时间> <value> # 同时设置一个或多个key-value对
mset <key1> <value1> <key2> <value2> ...# 同时设置多个key-value对,当且仅当所有key都不存在
msetnx <key1> <value1> <key2> <value2> ... # 从begin位置开始用 value 覆写key所存储的字符串值
setrange <key> <begin> <value> # 查询对应键值
get <key> # 获取key值的 [begin, end]范围之间的值
getrange <key> <begin> <end> # 获取key值后将key设置为新值value
getset <key> <value> # 同时获取一个或多个value
mget <key1> <key2> <key3> ...
# 将给定的<value>追加到原值的末尾
append <key> <value> # 获得值的长度
strlen <key> # 将key中存储的数字值增/减 1,只能对数字值操作
incr / decr <key># 将key中存储的数字值按照步长增减
incrby / decrby <key> <步长>
列表List
Redis列表是简单的字符串列表,按照插入顺序进行排序,可以在列表的头部(左边)或尾部(右边)添加新元素。列表的底层实际是个双向链表,对两端的操作性能很高,通过索引下标操作中间结点的性能会较差。
列表List的数据结构为快速链表quicklist,在列表元素较少的情况下会使用一块连续的内存存储,这个结构称为ziplist,即压缩列表。当数据量较多时才会改成quicklist。
普通的链表需要的附加指针控件太大,会浪费空间,Redis将链表和ziplist结合起来组成了quicklist,将多个ziplist使用双向指针串起来使用,这样既满足了快速插入删除功能,也不会出现太大的空间冗余。
常用操作命令
# 从列表左边/右边插入一个或多个值
lpush/rpush <key> <value1> <value2> <value3>... # 从列表的左边/右边吐出一个值,值在键在,值光键亡
lpop/rpop <key> # 从<key1>列表右边吐出一个值,插入到<key2>的左边
rpoplpush <key1> <key2> # 按照从左到右的顺序获得<key>列表中[begin, end]区间的值:0 - 左边第一个,-1 - 右边第一个,[0,-1] - 表示获取所有;
lrange <key> <begin> <end> # 按照从左到右的顺序获取<key>列中索引下标位置的值
lindex<key> <index> # 获得列表的长度
llen <key> # 在<value>的后面插入<newvalue>
linsert <key> before <value> <newvalue> # 从左边删除n个value
lrem <key> <n> <value> # 将key列表中下标为index的值替换成<value>
lset <key> <index> <value>
集合Set
Redis集合Set提供的功能类似于List,特殊之处在于Set是可以自动排重的,并且Set提供了判断某个成员元素是否存在的接口。
Redis的Set是string类型的无序集合,它底层是一个value为NULL的hash表,添加、删除、查找的时间复杂度都是O(1)。
Redis集合Set的数据结构是dict字典,采用Hash表实现的。
常用操作命令
# 在集合<key>中插入一个或多个值,已存在的值将被忽略;
sadd <key> <value1> <value2>... # 取出该集合的所有值
smembers <key> # 判断集合<key>中是否存在<value>,存在返回1,没有返回0;
sismembers <key> <value> # 获取该集合<key>的元素个数;
scard <key> # 删除集合<key>中的某些元素;
srem <key> <value1> <value2>... # 随机从集合<key>中吐出一个元素
spop <key> # 随机从该集合中取出n个值 ,不会从集合中删除
srandmember <key> <n> # 把<key1>集合中的<value>移动到<key2>集合中
smove <key1> <key2> <value> # 返回两个集合的交集元素
sinter <key1> <key2> # 返回两个集合的并集元素
sunion <key1> <key2> # 返回两个集合的差集元素(key1集合中不包含key2集合元素的元素)
sdiff <key1> <key2>
哈希Hash
Redis哈希Hash是一个键值对集合,是一个string类型的field和value的映射表,特别适合用于存储对象,类似Java中的Map<String, Object>。在操作时采用 key + field 来获取对应属性的数据,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。
# 给<key>中的<field>键赋值<value>
hset <key> <filed> <value> # 为<key>中的域<field>赋值<value>,当且仅当filed不存在
hsetnx <key> <filed1> <value1> # 批量设置<key>中的键值对
hmset <key> <filed1> <value1> <filed2> <value2> # 从<key>中取出属性<field>的数据
hget <key> <field> # 查看<key>中是否存在给定的<field>
hexist <key> <field> # 列出<key>中所有的field
hkeys <key> # 列出<key>中所有的value
hvals <key> # 为<key>中的域<field>的值加上增量<increment>
hincrby <key> <field> <increment>
有序集合Zset
Redis有序集合Zset是一个没有重复元素的字符串集合,并且为集合中的每个成员关联了一个评分score,这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合中的成员是唯一的,但是评分是可以重复的。
基于元素是有序的,可以很快速地通过评分score或者次序position来获取一个范围。访问有序集合的中间元素也是非常快的,因此可以使用有序集合作为一个重复成员的智能列表。
Zset是Redis提供的一个非常特别的数据结构,一方面等价于数据结构Map<String, Double>,可以给每个元素value赋予有一个权重score;另一方面又类似于TreeSet,内部元素会按照权重score进行排序,可以通过score的范围来获取元素的列表。
Zset底层使用了两个数据结构:
1)hash:hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。
2)跳跃表:跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。
常用操作命令
# 将一个或多个member元素及其score值加入到有序集<key>中
zadd <key> <scores1> <value1> <scores2> <value2>... # 返回有序集<key>中下标在[start, end]之间的元素,WITHSCORES选项能够同时让分数和值一起返回
zrange <key> <start> <stop> [WITHSCORES] # 返回有序集<Key>中所有score分介于[min, max]之间的成员,成员按照score分值从小到大次序排列
zrangebyscore <key> <min> <max> [withscores] [limit offset count] # 返回有序集<Key>中所有score分介于[min, max]之间的成员,成员按照score分值从大到小次序排列
zrevrangebyscore <key> <max> <min> [withscores] [limit offset count] # 为元素<value>的score加上增量
zincrby <key> <increment> <value> # 删除集合<key>中的指定元素<value>
zrem <key> <value> # 统计该集合<key>中score分值在[min, max]之间的元素个数
zcount <key> <min> <max> # 返回值<value>在集合<key>中的排名,从0开始计数
zrank <key> <value>
相关文章:
数据库Redis(二):基本数据类型
Redis中采用Key-Value键值对的形式将数据存储在数据库中,首先介绍Redis中针对键Key的操作命名。 Redis键Key相关命令 # 查看当前库所有key keys * # 判断某个key是否存在 exists <key> # 查看你的key是什么类型 type <key> # 删除指定的key数据 …...
mysql第四次作业
目录 数据表介绍 --1.学生表Student(SId,Sname,Sage,Ssex)--SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表Course(CId,Cname,TId)--CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表Teacher(TId,Tname)--TId 教师编号,Tname 教师姓名 --4.成绩…...
kubesphere 一键部署K8Sv1.21.5版本
1. 在centos上的安装流程 1.1 安装需要的环境 yum install -y socat conntrack ebtables ipset curl1.2 下载KubeKey #电脑必须可以访问github,很重要。不然安装过程会出问题 curl -sfL https://get-kk.kubesphere.io | VERSIONv1.2.1 sh - chmod x kk1.3 开始安…...
设计模式(12)状态模式
参考【设计模式】用Java实现状态模式_java 状态模式_卷帘的博客-CSDN博客 一、介绍: 1、状态模式:是一种行为设计模式,它允许对象在内部状态发生改变时改变其行为。该模式将对象的行为包装在不同的状态类中,使得对象的行为可以根…...
C#WPFPrism框架模块化应用实例
本文实例演示C#WPFPrism框架模块化应用实例。 首先创建WPF项目,修改App相关文件内容,以便使用prism。 一、添加模块 解决方案中添加ModuleA和ModuleB两个项目 删除不用的窗体,添加自定义窗体 修改ModuleA和ModuleB的输出类型...
ES6之Set集合(通俗易懂,含实践)
Set是什么?它的方法有哪些?它在实例开发中有什么作用? 让我为大家介绍一下吧! ES6提供了新的数据结构 Set(集合) 。它类似于数组,但成员的值是唯一的,常用于数组去重。 创建方法: let s new S…...
深度学习标注工具(包括自动标注)总结——持续更新
首次记录日期2023年10月24日 名称 导出格式支持形状地址1 anylabeling 支持yolov5和v8,自动标注的软件 沿物体轮廓分割 https://github.com/vietanhdev/anylabeling 2 RectLabel 使用Core ML模型自动标记图像 对象、属性、热键和快速标签的设置。 以PASCAL VOC …...
阿里云核心产品list
计算: 01函数计算(Function Compute)全托管serverless计算服务,不需要管理服务器等基础设施,只需要编写代码并上传。 02云服务器(Elastic Compute Service)云计算服务 03GPU云服务(G…...
矢量图形编辑软件 illustrator 2023 mac 中文软件特点
illustrator 2023 mac是一款矢量图形编辑软件,用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形:illustrator创建的图形是矢量图形,可以无限放大而不失真,这与像素图形编辑软…...
vue按特定字符串切割后端传输的图片路径
一、分隔字符 /userfiles/1/attachment/null/2023/10/13967b6b8332413f92ab67735873aa76.jpg|/userfiles/1/attachment/null/2023/10/17fd6e2c16144e66b8cd3ec495e6745f.png 后端传来图片的路径是按照 | 进行分隔的 首先在return中定义数组 在methods中添加分隔方法 //将查询…...
Spring底层原理(三)
Spring底层原理(三) Bean的生命周期 SpringBootApplication public class Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(Application.class, args);context.close();} }Slf4j Component public cla…...
ElementPlus表格中的背景透明
ElementPlus表格中的背景透明 最近写大屏,用到elementplus中的el-table,为了让显示效果好看一点,需要把表格的白色背景调整为透明,与整个背景融为一体。可以参考的资料非常少,大部分都是ElmentUI的方法,在…...
【会议征稿通知】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)
2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024) 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议(NNICE 2024࿰…...
PyCharm改变代码背景图片的使用教程
一个好的集成环境是学习和使用一门编程语言的重中之重,这次我给大家分享如何改变PyCharm软件的代码背景图片。 说明:本教程使用的是汉化版PyCharm软件。 打开PyCharm软件。 点击软件最上方导航栏的文件,然后找到设置。 打开设置然后点击外观…...
BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain
BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain----《BadNets:识别机器学习模型供应链中的漏洞》 背景: 许多用户将训练过程外包给云计算,或者依赖于经过训练的模型,然后根据特定的任务对模型进行微调。这…...
Kubernetes速成课程:掌握容器编排的精髓
微服务演进方向 • 面向分布式设计(Distribution):容器、微服务、API 驱动的开发; • 面向配置设计(Configuration):⼀个镜像,多个环境配置; • 面向韧性设计(Resistancy):故障容忍和自愈; • 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应; •…...
【数据库】分组数据 GROUP BY、HAVING
分组数据 创建分组过滤分组SQL 子句顺序 创建分组 s q l sql sql 中,使用 GROUP BY 子句对数据进行分组。分组通常与聚合函数一起使用,以对每个组内的数据执行聚合操作; e . g . e.g. e.g. 按照客户分组,计算每个客户的订单总金额…...
“唯品会VIP商品API:一键获取奢侈品详情,尊享品质生活!“
要获取唯品会VIP商品的详细信息,您可以通过唯品会的API接口进行调用。 唯品会提供了多种商品选择,包括服装、美容护肤、鞋子、箱包、家居、母婴等等。在这些商品中,VIP奢侈品专区是唯品会的重要特色之一。 要获取VIP商品的详细信息…...
uniapp解决iOS切换语言——原生导航栏buttons文字不生效
uniapp 切换语言原生导航栏buttons文字不生效? 文章目录 uniapp 切换语言原生导航栏buttons文字不生效?效果图page.json配置解决方式 效果图 场景:在 tabbar 页面中,配置 原生导航栏 buttons ,切换语言时,不…...
idea 基础设置
1、设置 IDEA 主题 2、自动导包和优化多余的包 3、同一个包下的类,超过指定个数的时候,导包合并为* 4、显示行号 , 方法和方法间的分隔符: 5、忽略大小写,进行提示 6、多个类不隐藏,多行显示 7、设置默认的…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
