数据库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、设置默认的…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...