Redis 数据类型

Redis 数据类型

文章目录

  • Redis 数据类型
    • 1. String类型
    • 2. key的层级结构
    • 3. Hash类型
    • 4. List类型
    • 5. Set类型
    • 6. SortedSet类型

1. String类型

String类型是redis中最常用的存储类型,即字符串类型,同时根据字符串的格式不同,可以将value分为三类:

  • string:普通字符串
  • int:整数类型,可进行自增、自减操作
  • float:浮点型,可进行自增、自减操作

无论是整数类型还是浮点型,最后都是以字符串的形式表现出来:

KEYVALUE
msgHello World
num25
score97.5

对于String类型,它有以下常见的命令:

  • SET:添加或修改已经存在的一个String类型的键值对

    在这里插入图片描述

    操作命令如下:

    set age 25

    在这里插入图片描述

    :如果key原本就存在,则set命令会使新添加的相同key的value覆盖之前的值

  • GET:根据key获取String类型的value

    在这里插入图片描述

    操作命令如下:

    get age

    在这里插入图片描述

  • MSET:批量添加多个String类型的键值对

    在这里插入图片描述

    操作命令如下:

    mset k1 v1 k2 v2 k3 v3

    在这里插入图片描述

  • MGET:根据多个key获取多个String类型的value

    在这里插入图片描述

    操作命令如下:

    mget k1 k2 k3

    在这里插入图片描述

  • INCR:让一个整型的key自增1

    在这里插入图片描述

    操作命令如下:

    incr age

    在这里插入图片描述

  • INCRBY:让一个整型的key自增并指定步长

    在这里插入图片描述

    操作命令如下:

    incrby age 10

    在这里插入图片描述

  • INCRBYFLOAT:让一个浮点型的数字自增并指定步长

    在这里插入图片描述

    操作命令如下:

    #先设置一个浮点型key

    set score 80.5

    #之后设置自增命令

    incrbyfloat score 5.5

    在这里插入图片描述

  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行

    在这里插入图片描述

    操作命令如下:

    setnx name2 XiaoMa

    在这里插入图片描述

    如果添加的key存在,则不执行:

    在这里插入图片描述

  • SETEX:添加一个String类型的键值对,并指定有效期

    在这里插入图片描述

    操作命令如下:

    setex name3 20 Mike

    在这里插入图片描述

2. key的层级结构

Redis的key允许有多个单词形成层级结构,多个单词之间用":"隔开,如下:

项目名:业务名:类型:id

假设我们的项目名为Test,有user和product两种不同类型的数据,可以这样定义key:

  • user相关的key:Test:user:1
  • product相关的key:Test:product:2

如果Value是一个对象,则可以将对象序列化为JSON字符串后存储:

KEYVALUE
Test:user:1{“id”:1, “name”:“Jack”, “age”:25}
Test:product:2{“id”:1, “name”:“荣耀70”, “price”: 2550}

在这里插入图片描述

通过图形化界面工具也可看到,刚刚构建的键值对也以层级的形式被构造出来:

在这里插入图片描述

3. Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段作CRUD,即每个key中可以有多个字段,如:

在这里插入图片描述

对于Hash类型,它有以下常见命令:

  • HSET:添加或修改hash类型key的field的值

    在这里插入图片描述

    操作命令如下:

    hset Test:user:2 name Wangwu

    在这里插入图片描述

  • HGET:获取一个hash类型key的field的值

    在这里插入图片描述

    操作命令如下:

    hget Test:user:2 name

    在这里插入图片描述

  • HMSET:给指定hash类型的key批量添加多个field的值

    在这里插入图片描述

    操作命令如下:

    hmset Test:user:3 name Zhangsan age 20

    在这里插入图片描述

  • HMGET:获取指定hash类型的key的多个field的值

    在这里插入图片描述

    操作命令如下:

    hmget Test:user:3 name age

    在这里插入图片描述

  • HGETALL:获取一个hash类型的key中的所有的field和value

    在这里插入图片描述

    操作命令如下:

    hgetall Test:user:2

    在这里插入图片描述

  • HKEYS:获取一个hash类型的key中的所有field

    在这里插入图片描述

    操作命令如下:

    hkeys Test:user:2

    在这里插入图片描述

  • HVALS:获取一个hash类型的key中的所有value

    在这里插入图片描述

    操作命令如下:

    hvals Test:user:2

    在这里插入图片描述

  • HINCRBY:让一个hash类型key的字段值(整型)自增长并指定步长

    在这里插入图片描述

    操作命令如下:

    hincrby Test:user:2 age 5

    在这里插入图片描述

  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

    在这里插入图片描述

    操作命令如下:

    hsetnx Test:user:2 sex man

    在这里插入图片描述

    如果设置的field已存在,则无法执行:

    在这里插入图片描述

4. List类型

Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。即可以支持正向检索也可以支持反向检索,特征也与LinkedList类似:

  • 有序
  • 元素可重复
  • 插入和删除快
  • 查询速度一般

它的结构图如下:

在这里插入图片描述

对于List类型,它有以下常见命令:

  • LPUSH:向列表左侧插入一个或多个元素

    在这里插入图片描述

    操作命令如下:

    lpush user1 1 2 3

    在这里插入图片描述

    通过图形化界面也能看出,LPUSH最先插入的元素为末位:

    在这里插入图片描述

  • LPOP:移除指定数量元素并返回从列表左侧弹出的元素,没有则返回nil

    在这里插入图片描述

    操作命令如下:

    lpop user1

    在这里插入图片描述

  • RPUSH:向列表右侧插入一个或多个元素

    在这里插入图片描述

    操作命令如下:

    rpush user1 4 5 6

    在这里插入图片描述

    通图形化界面也能看出,RPUSH最先插入的元素为首位:

    在这里插入图片描述

  • RPOP:移除指定数量元素并返回从列表右侧弹出的元素,没有则返回nil

    在这里插入图片描述

    操作命令如下:

    rpop user1 1

    在这里插入图片描述

  • LRANGE:返回一段角标分为内的所有元素

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    操作命令如下:

    lrange user1 1 3

    在这里插入图片描述

    在这里插入图片描述

  • BLPOP & BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil

    在这里插入图片描述

    操作命令如下:

    先获取一个空的列表,并指定等待时间

    blpop user2 100

    在这里插入图片描述

    此时开启一个新的会话并向user2列表中添加元素:

    在这里插入图片描述

    再回到之前的会话就能看到刚刚阻塞中的user2已经获取到了元素(:只能pop出一个元素):

    在这里插入图片描述

5. Set类型

Redis的Set结构与Java中的HashSet类似,可以看作是一个value为null的HashMap,因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能(可用于好友列表等业务中)

对于Set类型,它有以下常见命令:

  • SADD:向set走添加一个或多个元素

    在这里插入图片描述

    操作命令如下:

    给zs添加好友lisi、wangwu、zhaoliu

    sadd zs lisi wangwu zhaoliu

    在这里插入图片描述

  • SMEMBERS:获取set中的所有元素

    在这里插入图片描述

    操作命令如下:

    smembers zs

    在这里插入图片描述

  • SREM:移除set中的指定元素

    在这里插入图片描述

    操作命令如下:

    srem zs lisi

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • SCARD:返回set中的元素个数

    在这里插入图片描述

    操作命令如下:

    scard zs

    在这里插入图片描述

  • SISMEMBER:判断一个元素是否存在于set中

    在这里插入图片描述

    操作命令如下:

    sismember zs wangwu

    在这里插入图片描述

  • SINTER:获取两个集合的交集

    在这里插入图片描述

    操作命令如下:

    先再创建一个set ls,它的元素有wangwu、zhaoliu、tianqi

    sadd ls wangwu zhaoliu tianqi

    之后求zs 和 ls 的交集

    sinter zs ls

    在这里插入图片描述

  • SDIFF:获取两个集合的差集

    在这里插入图片描述

    操作命令如下:

    sdiff zs ls

    在这里插入图片描述

  • SUNION:获取两个集合的并集

    在这里插入图片描述

    操作命令如下:

    sunion zs ls

    在这里插入图片描述

6. SortedSet类型

Redis中的SortedSet是一个可排序的set集合,其中每个元素都带有一个socre属性,可以基于score属性对元素排序(默认为升序),底层的实现是一个跳表加hash表,它具备以下特性:

  • 可排序(可用于实现排行榜等业务功能)
  • 元素不重复
  • 查询速度快

对于SortedSet类型,它有以下常见命令:

  • ZADD:添加一个或多个元素到sorted set,如果已经存在则更新其score值

    在这里插入图片描述

    操作命令如下:

    zadd stus 85 Jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles

    在这里插入图片描述

    通过图形化界面可以看出,添加的元素默认以升序的方式排列

    在这里插入图片描述

  • ZREM:删除sorted set中的一个指定元素

    在这里插入图片描述

    操作命令如下:

    zrem stus Lucy

    在这里插入图片描述

  • ZSCORE:获取sorted set中的指定元素的score值

    在这里插入图片描述

    操作命令如下:

    zscore stus Rose

    在这里插入图片描述

  • ZRANK:获取sorted set中的指定元素的排名

    在这里插入图片描述

    操作命令如下:

    zrank stus Tom

    在这里插入图片描述

    在这里插入图片描述

    :这里获取到的排名是升序排名,想要获取降序排名的话需要使用ZREVRANK,即在Z后面添加REV

    在这里插入图片描述

    操作命令如下:

    zrevrank stus Tom

    在这里插入图片描述

  • ZCARD:获取sorted set中的元素个数

    在这里插入图片描述

    操作命令如下:

    zcard stus

    在这里插入图片描述

  • ZCOUNT:统计score值在给定范围内内的所有元素的个数

    在这里插入图片描述

    操作命令如下:

    zcount stus 70 80

    在这里插入图片描述

    在这里插入图片描述

  • ZINCRBY:让sorted set中的指定元素自增,步长为指定的increment

    在这里插入图片描述

    操作命令如下:

    zincrby stus 5 Tom

    在这里插入图片描述

    在这里插入图片描述

  • ZRANGE:按照score排序后,获取指定排名范围内的元素

    在这里插入图片描述

    操作命令如下:

    zrange stus 0 2

    在这里插入图片描述

    若需要获取降序排列后的元素,则使用ZREVRANGE

    zrevrange stus 0 2

    在这里插入图片描述

    在这里插入图片描述

  • ZRANGEBYSCORE:按照score排序后,获取指定score范围内的元素

    在这里插入图片描述

    操作命令如下:

    zrangebyscore stus 70 90

    在这里插入图片描述

    若需要获取降序排列后的元素,可以使用ZREVRANGEBYSCORE

    在这里插入图片描述

    操作命令如下:

    zrevrangebyscore stus 90 70

    在这里插入图片描述

以上就是Redis常用的数据类型了!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/378209.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本-linux如何在脚本中远程到一台linux机器并执行命令

需求:我们需要从11.0.1.17远程到11.0.1.16上执行命令 实现: 1.让11.0.1.17 可以免密登录到11.0.1.16 [rootlocalhost ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created d…

前端基础之JavaScript学习——变量、数据类型、类型转换

大家好,我是来自CSDN的博主PleaSure乐事,今天我们开始有关JS的学习,希望有所帮助并巩固有关前端的知识。 我使用的编译器为vscode,浏览器使用为谷歌浏览器,使用webstorm或其他环境效果几乎一样,使用系统自…

数电基础 - 硬件描述语言

目录 一. 简介 二. Verilog简介和基本程序结构 三. 应用场景 四. Verilog的学习方法 五.调式方法 一. 简介 硬件描述语言(Hardware Description Language,HDL)是用于描述数字电路和系统的形式化语言。 常见的硬件描述语言包括 VHDL&…

zephyr设置BLE广播数据实例

目录 实例1:静态开启广播数据实例2:动态更改广播数据实例3:创建可连接的广播 实例1:静态开启广播数据 新建一个hello world的工程模板。 在prj.conf中开启蓝牙 CONFIG_BTy这个宏,默认会开启广播支持 ( BT_BROADCAS…

组网升级,双击热备和宽带管理

拓扑 要求: 要求12: 要求13: 要求14: 要求15: 要求16:

解决 Vscode不支持c++11的语法

问题: 解决方案: 1、按 CtrlShiftP 调出命令面板,输入 C/C: Edit Configurations (UI) 并选择它。这将打开 C/C 配置界面 2、打开 c_cpp_properties.json 文件 3、编辑 c_cpp_properties.json 4、保存 c_cpp_properties.json 文件。 关闭并…

使用JS和CSS制作的小案例(day二)

一、写在开头 本项目是从github上摘取,自己练习使用后分享,方便登录github的小伙伴可以看本篇文章 50项目50天​编辑https://github.com/bradtraversy/50projects50dayshttps://github.com/bradtraversy/50projects50days有兴趣的小伙伴可以自己去gith…

SpringBoot详细解析

1.什么是springboot springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。那么spring对应springboot有什么缺点呢? spring项目搭建的缺点: 配置麻烦依赖tomcat启动慢 2.springboot的特点 自动配置 Spring Boot的自动配置是一个运行时&…

JVM垃圾回收-----垃圾分类

一、垃圾分类定义 垃圾分类是JVM垃圾分类中的第一步,这一步将堆中的对象分为存活对象和垃圾对象两类。 在垃圾分类阶段,JVM会从一组根对象开始,通过对象之间的引用关系,遍历所有的对象,并将所有存活的对象进行标记。…

flutter 手写 TabBar

前言: 这几天在使用 flutter TabBar 的时候 我们的设计给我提了一个需求: 如下 Tabbar 第一个元素 左对齐,试了下TabBar 的配置,无法实现这个需求,他的 配置是针对所有元素的。而且 这个 TabBar 下面的 滑块在移动的时…

idea中使用maven

默认情况下,idea会自动下载并安装maven,这不便于我们管理。 最好是自行下载maven,然后在idea中指定maven的文件夹路径

解析 Mira :基于 Web3,让先进的 AI 技术易于访问和使用

“Mira 平台正在以 Web3 的方式解决当前 AI 开发面临的复杂性问题,同时保护 AI 贡献者的权益,让他们可以自主拥有并货币化自己的模型、数据和应用,以使先进的 AI 技术更加易于访问和使用。” AI 代表着一种先进的生产力,它通过深…

【UE5.1】NPC人工智能——02 NPC移动到指定位置

效果 步骤 1. 新建一个蓝图,父类选择“AI控制器” 这里命名为“BP_NPC_AIController”,表示专门用于控制NPC的AI控制器 2. 找到我们之前创建的所有NPC的父类“BP_NPC” 打开“BP_NPC”,在类默认值中,将“AI控制器类”一项设置为“…

影响转化率的多元因素分析及定制开发AI智能名片S2B2C商城系统小程序的应用案例

摘要:在互联网时代,转化率是衡量营销活动成功与否的关键指标。本文首先分析了影响转化率的多种因素,包括活动页面的设计、活动的限时性、主题文案的吸引力、从众心理的运用,以及最核心的产品质量与优惠力度。接着,本文…

path+HTTP协议+IP+端口(nodejs)

一.path //导入 fs const fs require(fs); const path require(path); //写入文件 // fs.writeFileSync(__dirname /index.html, love); // console.log(__dirname /index.html);//resolve 解决 // console.log(path.resolve(__dirname, ./index.html)); // console.log(p…

JVM知识点梳理

目录标题 1.类加载机制1.1 Java 运行时一个类是什么时候被加载的?1.2 JVM 一个类的加载过程?1.3 一个类被初始化的过程?1.4 继承时父子类的初始化顺序是怎样的?1.5 究竟什么是类加载器?1.6 JVM 有哪些类加载器?1.7 JVM 中不同的类加载器加载哪些文件?1.8 JVM 三层类加载…

基于LSTM及其变体的回归预测

1 所用模型 代码中用到了以下模型: 1. LSTM(Long Short-Term Memory):长短时记忆网络,是一种特殊的RNN(循环神经网络),能够解决传统RNN在处理长序列时出现的梯度消失或爆炸的问题。L…

动手学深度学习6.3 填充和步幅-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:填充和步幅_哔哩哔哩_bilibili 代码实现_哔哩哔哩_bilibili 本节教材地址:6.3. 填充和…

笔记 5 :linux 0.11 注释,函数 copy_mem() , copy_process () , 中断函数 int 80H 的代码框架

(38)接着介绍一个创建进程时的重要的函数 copy_mem() 函数: (39) 分析另一个关于 fork() 的重要的函数 copy_process(),与李忠老师的操…

Qcom平台通过Hexagon IDE 测试程序性能指导

Qcom平台通过Hexagon IDE 测试程序性能指导 1 安装Hexagon IDE工具2 测试工程2.1 打开Hexagon IDE2.2 新建工程2.3 添加测试案例2.3.1 方法一:新建2.3.2 方法二:拷贝 2.4 配置测试环境2.4.1 包含头文件2.4.2 添加程序优化功能(需先bulid一下)2.4.3 添加g…