当前位置: 首页 > news >正文

数据库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键值对的形式将数据存储在数据库中&#xff0c;首先介绍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&#xff0c;很重要。不然安装过程会出问题 curl -sfL https://get-kk.kubesphere.io | VERSIONv1.2.1 sh - chmod x kk1.3 开始安…...

设计模式(12)状态模式

参考【设计模式】用Java实现状态模式_java 状态模式_卷帘的博客-CSDN博客 一、介绍&#xff1a; 1、状态模式&#xff1a;是一种行为设计模式&#xff0c;它允许对象在内部状态发生改变时改变其行为。该模式将对象的行为包装在不同的状态类中&#xff0c;使得对象的行为可以根…...

C#WPFPrism框架模块化应用实例

本文实例演示C#WPFPrism框架模块化应用实例。 首先创建WPF项目,修改App相关文件内容,以便使用prism。 一、添加模块 解决方案中添加ModuleA和ModuleB两个项目 删除不用的窗体,添加自定义窗体 修改ModuleA和ModuleB的输出类型...

ES6之Set集合(通俗易懂,含实践)

Set是什么&#xff1f;它的方法有哪些&#xff1f;它在实例开发中有什么作用&#xff1f; 让我为大家介绍一下吧&#xff01; ES6提供了新的数据结构 Set(集合) 。它类似于数组&#xff0c;但成员的值是唯一的&#xff0c;常用于数组去重。 创建方法&#xff1a; let s new S…...

深度学习标注工具(包括自动标注)总结——持续更新

首次记录日期2023年10月24日 名称 导出格式支持形状地址1 anylabeling 支持yolov5和v8&#xff0c;自动标注的软件 沿物体轮廓分割 https://github.com/vietanhdev/anylabeling 2 RectLabel 使用Core ML模型自动标记图像 对象、属性、热键和快速标签的设置。 以PASCAL VOC …...

阿里云核心产品list

计算&#xff1a; 01函数计算&#xff08;Function Compute&#xff09;全托管serverless计算服务&#xff0c;不需要管理服务器等基础设施&#xff0c;只需要编写代码并上传。 02云服务器&#xff08;Elastic Compute Service&#xff09;云计算服务 03GPU云服务&#xff08;G…...

矢量图形编辑软件 illustrator 2023 mac 中文软件特点

illustrator 2023 mac是一款矢量图形编辑软件&#xff0c;用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator 2023 mac软件特点 矢量图形&#xff1a;illustrator创建的图形是矢量图形&#xff0c;可以无限放大而不失真&#xff0c;这与像素图形编辑软…...

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表格中的背景透明 最近写大屏&#xff0c;用到elementplus中的el-table&#xff0c;为了让显示效果好看一点&#xff0c;需要把表格的白色背景调整为透明&#xff0c;与整个背景融为一体。可以参考的资料非常少&#xff0c;大部分都是ElmentUI的方法&#xff0c;在…...

【会议征稿通知】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff09; 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff0…...

PyCharm改变代码背景图片的使用教程

一个好的集成环境是学习和使用一门编程语言的重中之重&#xff0c;这次我给大家分享如何改变PyCharm软件的代码背景图片。 说明&#xff1a;本教程使用的是汉化版PyCharm软件。 打开PyCharm软件。 点击软件最上方导航栏的文件&#xff0c;然后找到设置。 打开设置然后点击外观…...

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain

BadNets: Identifying Vulnerabilities in the Machine Learning Model Supply Chain----《BadNets:识别机器学习模型供应链中的漏洞》 背景&#xff1a; 许多用户将训练过程外包给云计算&#xff0c;或者依赖于经过训练的模型&#xff0c;然后根据特定的任务对模型进行微调。这…...

Kubernetes速成课程:掌握容器编排的精髓

微服务演进方向 • 面向分布式设计(Distribution):容器、微服务、API 驱动的开发; • 面向配置设计(Configuration):⼀个镜像&#xff0c;多个环境配置; • 面向韧性设计(Resistancy):故障容忍和自愈; • 面向弹性设计(Elasticity):弹性扩展和对环境变化(负载)做出响应; •…...

【数据库】分组数据 GROUP BY、HAVING

分组数据 创建分组过滤分组SQL 子句顺序 创建分组 s q l sql sql 中&#xff0c;使用 GROUP BY 子句对数据进行分组。分组通常与聚合函数一起使用&#xff0c;以对每个组内的数据执行聚合操作&#xff1b; e . g . e.g. e.g. 按照客户分组&#xff0c;计算每个客户的订单总金额…...

“唯品会VIP商品API:一键获取奢侈品详情,尊享品质生活!“

要获取唯品会VIP商品的详细信息&#xff0c;您可以通过唯品会的API接口进行调用。 唯品会提供了多种商品选择&#xff0c;包括服装、美容护肤、鞋子、箱包、家居、母婴等等。在这些商品中&#xff0c;VIP奢侈品专区是唯品会的重要特色之一。 要获取VIP商品的详细信息&#xf…...

uniapp解决iOS切换语言——原生导航栏buttons文字不生效

uniapp 切换语言原生导航栏buttons文字不生效&#xff1f; 文章目录 uniapp 切换语言原生导航栏buttons文字不生效&#xff1f;效果图page.json配置解决方式 效果图 场景&#xff1a;在 tabbar 页面中&#xff0c;配置 原生导航栏 buttons &#xff0c;切换语言时&#xff0c;不…...

idea 基础设置

1、设置 IDEA 主题 2、自动导包和优化多余的包 3、同一个包下的类&#xff0c;超过指定个数的时候&#xff0c;导包合并为* 4、显示行号 &#xff0c; 方法和方法间的分隔符&#xff1a; 5、忽略大小写&#xff0c;进行提示 6、多个类不隐藏&#xff0c;多行显示 7、设置默认的…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

CMake 从 GitHub 下载第三方库并使用

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

基于 TAPD 进行项目管理

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

Linux 中如何提取压缩文件 ?

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

MySQL的pymysql操作

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