数据库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、设置默认的…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
