数据库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、设置默认的…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
