Redis五大数据类型,你知道吗?

本文深入解析Redis中的五种主要数据类型:字符串、散列、列表、集合和有序集合。每种类型都附带详细的命令说明,包括存储、检索、修改等操作,帮助读者全面掌握Redis的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

glob风格通配符函数

符号含义
?匹配任意一个字符
*匹配任意个(包括0个)字符
[]匹配括号间的任一字符,可以使用"-“符号表示一个范围,如a[b-d]可以匹配"ab”,“ac"和"ad”
\x匹配字符x,用于转义符号.如要匹配"?"就需要使用?

获得键值的数据类型

TYPE key

REDIS中的数据类型

1. 字符串类型(允许存储数据的最大容量为512M)

  • 赋值
    SET key value
  • 取值
    GET key value
  • 递增数字(当存储的是整数类型的字符串时)
    INCR key
  • 增加指定的整数(当存储的是整数类型的字符串时)
    INCRBY key increment(要增加的数值)
  • 递减数字(当存储的是整数类型的字符串时)
    DECR key
  • 减少指定的整数(当存储的是整数类型的字符串时)
    DECRBY key decrement(要减少的数值)
  • 增加指定浮点数
    INCRBYFLOAT key increment(要增加的浮点数)
  • 向尾部追加值
    • 说明: APPEND作用是向键值的末尾追加value,如果键不存在则将该键的值设置为value,返回值为追加后字符串的长度
      APPEND key value
SET name zhang # OK
APPEND name san # 8
  • 获取字符串长度(存在返回键值的长度,不存在返回0)
    STRLEN key
  • 同时设置多个键值
    MSET key value [key value …]
  • 同时获取多个键值
    MGET key [key …]
  • 位操作(一个字节由8个位组成,下面的命令操作的是二进制位)
    GETBIT key offset # 获取key的offset位二进制位
    SETBIT key offset value # 将key的offset二进制位设置为value
    BITCOUNT key [start] [end] # 获得[start, end]二进制位中值是1的个数,无start和end表示全部
    BITOP operation destkey key [key …] # operation为进行的运算,有AND,OR,XOR和NOT,destkey为运算完后保存的键,key为要进行运算的key
对 foot1 和 foot2 进行AND运算,并将结果保存到foot中
BITOP AND foot foot1 foot2

2. 散列类型(hash)

  1. 简介:类似于python中的字典的数据结构key = {key: value, key1: value1…},一个散列类型键至多可以包含2^32-1个字段
  2. 适用:适用于存储对象,使用对象类别和ID构成键名,使用字段表示对象的属性,则字段值存储属性值
  3. 命令说明
  • 赋值(当key中的field存在时,更新value,插入操作返回1,更新操作返回0)
    HSET key field value
  • 取值
    HGET key
  • 多个赋值
    HMSET key field value [field value …]
  • 多个取值
    HMGET key field [field …]
  • 同时获得所有字段的值
    HGETALL key
  • 判断键中的字段是否存在(存在返回1,不存在返回0)
    HEXISTS key field
  • 当字段不存在时赋值,当字段存在时不执行任何操作
    HSETNX key fiels value
  • 增加数字(散列类型没有HINCR命令)
    HINCRBY key field increment
  • 删除字段(返回值是被删除的字段的个数)
    HDEL key field [field …]
  • 只获取字段名
    HKEYS key
  • 只获取字段值(用来获取键中所有的字段值)
    HVALS key
  • 获取字段的数量
    HLEN key

3. 列表类型

  1. 简介: 类似于python中的列表list key = [value, value …],列表类型内部是使用双向链表实现的,一个列表中最多容纳2^32-1个元素
  2. 适用: 1. 查取最左或最后的元素 2. 记录日志,保证加入新日志的速度不会受到已有日志数量的影响
  3. 命令
  • 向列表两端增加元素(返回值为增加元素后列表的长度)
    LPUSH key value [value …] # 向列表左侧添加元素
    RPUSH key value [value …] # 向列表右侧添加元素
  • 从列表两端弹出元素(返回值为被弹出的元素值)
    LPOP numbers
    RPOP numbers
  • 获取列表中元素的个数(当键不存在时返回0)
    LLEN key
  • 获得列表片段 类似于python中的切片,不过LRANGE取值是闭区间[start, end]
    LRANGE key start stop
    • 如果start的索引比stop的索引位置靠后,则会返回空列表
    • 如果stop大于实际的索引范围,则会返回列表最右边的元素
  • 删除列表中指定的值
    LREM key count value
    • 根据count值的不同,LREM命令的执行方思会有所差异
      • 当count>0时,LREM命令会从列表左边开始删除前count个值为value的元素
      • 当count<0时,LREM命令会从列表右边开始删除前count个值为value的元素
      • 当count=0时,LREM命令会从列表中删除所有值为value的元素
  • 获得指定索引的元素值
    LINDEX key index # 返回key列表中索引为index的元素
  • 设置指定索引的值
    LSET key index value # 设置key列表中索引为index的元素的值为value
  • 只保留列表指定片段
    LTRIM key start end
    • LTRIM可以删除指定索引范围之外的所有元素,其指定列表范围的方法和LRANGE相同,[start, end]也是闭区间
    • 应用:可以保留最新的100条日志 LTRIM logs 0 99
  • 向列表中插入元素
    LINSERT key BEFORE|AFTER pivot value
    • 说明: LINSERT命令首先会在key这个列表中从左到右找到值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面
    • 返回值: 插入列表后列表的元素个数
  • 将元素从一个列表转到另一个列表
    RPOPLPUSH source destination
    • 说明:限制性RPOP命令从source列表的右边弹出一个元素,然后将其加入到destination列表的左边,并返回这个元素的值

4. 集合类型

  • 特点: 1. 无序性 2. 唯一性 3. 至多2^32-1个字符串
  • 增加元素(增加一个或多个,键不存在则会自动创建)
    SADD key member [member …]
  • 删除元素(删除一个或多个元素,返回删除成功的个数)
    SREM key member [member …]
  • 获得集合中的所有元素
    SMEMBERS key
  • 判断元素是否在集合中(值存在返回1,不存在返回0)
    SISMEMBER key member
  • 集合间运算
    • 差集运算
      SDIFF key [key …]
      SDIFF a b (表示a-b,结果为属于a且不属于b的元素构成的集合)
    • 交集运算
      SINTER key [key …]
      SINTER a b (表示所有属于a且属于b的集合)
    • 并集运算
      SUNION key [key …]
      SUNION a b (表示所有属于a或者属于b的集合)
  • 获取集合中元素的个数
    SCARD key
  • 进行集合运算并将结果存储
    SDIFFSTORE destination key [key …]
    SINTERSTORE destination key [key …]
    SUNIONSTORE destination key [key …]
    SDIFFSTORE 和 SDIFF命令功能一样,唯一区别就是前者不会直接返回运算结果,而是将结果存储在destination键中
    SDIFFSTORE命令常用于需要进行多步集合运算的场景中,如需要先计算差集再将结果和其他键计算交集
  • 随机获得集合中的元素
    SRANDMEMBER key [count]
    • 当count为正数时,SRANDMEMBER会随机从集合里获得count个不重复的元素,如果count的值大于集合中的元素的个数,则SRANDMEMBER会返回集合中的全部元素
    • 当count为负数时,SRANDMEMBER会随机从集合中获得count个元素,这些元素有可能相同
  • 从集合中随机弹出一个元素
    SPOP key

5.有序集合类型

  • 有序集合和列表类型的相似之处
    1. 二者都是有序的
    2. 二者都可以获得某一个范围的元素
  • 有序集合和列表的区别
    1. 列表类型是通过链表实现的,获取靠近两端的数据速度极快,当元素增多后,访问中间数据的速度会较慢,所以它更加适合实现如"新鲜事"或"日志"这样很少访问中间元素的应用
    2. 有序集合类型是使用散列表和跳跃表(Skip list)实现的,所以及时读取位于中间部分的数据速度也很快(时间复杂度O(log(N)))
    3. 列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改这个元素的分数)
    4. 有序集合要比列表类型更耗费内存
  • 增加元素
    ZADD key score member [score member …]
  • 获得元素的分数
    ZSCORE key member
  • 获得排名在某个范围的元素列表
    ZRANGE key start stop [WITHSCORES]
    ZREVRANGE key start stop [WITHSCORES]
    ZRANGE 命令会按照元素分数从小到大的顺序返回索引从start到stop之间的所有的元素(包含两端的元素)
    如果最后加上WITHSCORES就会在返回的结果上加上元素的分数
    如果两个元素的分数相同,Redis会按照字典顺序(即"0"<“9”<A"<“Z”<“a”<“z”)
    ZREVRANGE命令和ZRANGE唯一不同在于ZREVRANGE是按照元素分数从大到小的顺序给出的
  • 获得指定分数范围的元素
    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
    • 按照元素分数从小到大的顺序返回分数在min和max之间(包含min和max)的元素
    • 如果希望分数不包含端点值,可以再分数前加上"("
    • min和max还支持无穷大,-inf和+inf分别表示负无穷和正无穷
    • LIMIT offset count 同sql语句的用法一样,offset表示偏移量,count表示显示从offset+1个数开始的count个元素
  • 增加某个元素的分数
    ZINCRBY key increment member
    • ZINCRBY可以增加一个元素的分数,返回值是更改后的分数,imcrement也可以是个负数,表示减分
    • 如果指定的元素不存在,Redis在执行命令前会建立它并将它的分数赋为0再执行操作
  • 获得集合中元素的数量
    ZCARD key
  • 获得指定分数范围内的元素个数
    ZCOUNT key min max
  • 删除一个或多个元素
    ZREM key member [member …]
  • 按照排名范围删除元素
    ZREMRANGEBYRANK key start stop
    • 按照元素分数从小到大的顺序删除处在指定排名范围内的所有元素,并删除返回的元素数量
  • 按照分数范围删除元素
    ZREMRANGEBYSCORE key min max
    • 删除指定范围的值,返回值是删除的元素数量
  • 获得元素的排名
    ZRANK key member (按照元素分数从小到大排序获得元素的排名)
    ZREVRANK key member (按照元素分数从大到小排序获得元素的排名)
  • 计算有序集合的交集
    ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
    • ZINTERSTORE命令用来计算多个有序集合的交集并将结果存储在destination键中(同样以有序集合类型存储),返回值为destination键中的元素个数
    • 当AGGREAGATE是SUM时(默认值),destination键中的元素分数是每个参与计算的集合中该元素分数的和
    • 当AGGREAGATE是MIN时(默认值),destination键中的元素分数是每个参与计算的集合中该元素分数的最小值
    • 当AGGREAGATE是MAX时(默认值),destination键中的元素分数是每个参与计算的集合中该元素分数的最大值
    • ZINTERSTORE命令还能通过WEIGHTS参数设置每个集合的权重,每隔几何在参与计算时元素的分数会被乘上该集合的权重例如:
      ZINTERSTORE sorteSetsResult 2 sorteSets1 sortsSets2 WEIGHTS 1 0.1
  • 计算集合间的并集,ZUNIONSTORE,用法同ZINTERSTORE用法相同
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值