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

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常用的数据类型了!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 对服务器进行基本了解(二)
  • 如何制定高效的媒体公关解决方案
  • 网络抓包知识
  • MBR40150FCT-ASEMI无人机专用MBR40150FCT
  • SEO效果好的wordpress主题
  • 计算机视觉之SLAM与6Dof
  • 深度学习损失计算
  • SpringBoot使用开发环境的application.properties
  • go语言 fmt的几个打印区别以及打印格式
  • Linux内核启用 bridge 模块
  • UPFC统一潮流控制器的simulink建模与仿真
  • React、Vue的password输入框组件,如何关闭自动填充?
  • Go 语言中的互斥锁 Mutex
  • ARFoundation系列讲解 - 91 Immersal 简介
  • 独角数卡(自动发卡系统)开源自动化售货最新2.0.6
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • golang中接口赋值与方法集
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • spark本地环境的搭建到运行第一个spark程序
  • Vue 2.3、2.4 知识点小结
  • Vue2 SSR 的优化之旅
  • vuex 学习笔记 01
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 阿里研究院入选中国企业智库系统影响力榜
  • 仿天猫超市收藏抛物线动画工具库
  • 精彩代码 vue.js
  • 每天10道Java面试题,跟我走,offer有!
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 温故知新之javascript面向对象
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #WEB前端(HTML属性)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1)Hilt的基本概念和使用
  • (27)4.8 习题课
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (二十六)Java 数据结构
  • (附源码)springboot教学评价 毕业设计 641310
  • (含笔试题)深度解析数据在内存中的存储
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (算法)前K大的和
  • (转)VC++中ondraw在什么时候调用的
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .a文件和.so文件
  • .Net Redis的秒杀Dome和异步执行
  • .NET 常见的偏门问题