Redis 数据类型

Redis 数据类型

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

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Redis支持多种数据类型,包括string、hash、list、set和sorted set等。其中,string是最基本、最简单的数据类型,用于存储字符串。 Hash是用于存储键值对的数据结构,其中的value只能存储字符串,不允许存储其他数据类型,也不存在嵌套现象。每个hash可以存储232 - 1个键值对,并可以灵活添加或删除对象属性。但需要注意的是,hash类型并不适合存储大量对象,也不应该将hash作为对象列表使用,因为遍历整体数据的效率可能会较低。 除了string和hash类型,Redis还支持list、set和sorted set等数据类型。List是一个有序的字符串列表,可以进行插入、删除和查找等操作。Set是一个无序的字符串集合,可以进行元素的添加、删除和查找操作,并且不允许重复元素的存在。Sorted Set是一个有序的字符串集合,每个元素都有一个对应的score,可以根据score进行排序和范围查找。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Redis 数据类型](https://blog.csdn.net/weixin_52851967/article/details/122670564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值