Redis五大类型及方法详细介绍

Redis五大类型及方法详细介绍

Redis作为一款高性能的键值对存储数据库,支持多种数据类型,每种类型都有其独特的特性和应用场景。以下将详细介绍Redis的五大基本数据类型:字符串(String)、列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset)。

1、String类型

1.1 String类型简介

  • String类型是Redis最基础的数据类型。在Redis中,一个字符串值最大可达512M。
  • 该类型是二进制安全的,这意味着它可以包含任何数据,无论是普通文本、数字,甚至是如jpg图片数据或者序列化后的对象。
  • String的数据结构是简单动态字符串(SDS,Simple Dynamic String),这是一种可修改的字符串结构,其内部结构类似于Java中的ArrayList,在进行字符串操作时能高效地管理内存。

1.2 常用命令

命令含义
keys *查看所有的键
set key value添加键值对
mset key1 value1 key2 value2 …同时设置多个键值对
get key查询对应键的键值对
append key value将指定的value追加到key原值的末尾(例如,原值为“abc”,追加值为“def”,执行后结果为“abcdef”)
strlen key获取key值的长度
setnx key value仅当key不存在时,才设置key的值为value
getrange key start end获取值的指定范围(例如,“0 - 2”表示获取从下标0到2的字符)
setrange key offset value从指定的起始位置(offset)开始,用value替换原有值的相应部分
setex key seconds value设置带过期时间(单位为秒)的键值对
getset key value用新的value替换对应key的旧value,并返回旧value
msetnx key1 value1 key2 value2 …同时设置多个键值对,只有所有key都不存在时才成功,只要有一个失败则全部失败
incr key将key中储存的数字值增1,仅能对数字值操作,如果key为空则新增值为1
decr key将key中储存的数字值减1,仅能对数字值操作,如果key为空则新增值为 - 1
incrby key increment将key中储存的数字增加指定的步长值(例如,原value值为500,步长为20,结果为520)
decrby key decrement将key中储存的数字减少指定的步长值(例如,原value值为500,步长为20,结果为480)

2、List类型(列表)

2.1 List类型简介

  • Redis列表是简单的字符串列表,按照元素插入顺序排序,支持在列表的头部(左边)或尾部(右边)添加元素。
  • 其底层数据结构实际上是一个双向链表,这使得对列表两端的操作性能极高,但通过索引下标的方式操作中间节点时,性能相对较差。
  • List的数据结构为快速链表(quickList)。在列表元素较少的情况下,Redis会使用一块连续内存来存储,这种结构称为压缩列表(ziplist)。当数据量增大时,才会转换为quickList结构。

2.2 常用命令

命令含义
lpush key value1 value2 …从左边插入一个或多个值
rpush key value1 value2 …从右边插入一个或多个值
lpop key从左边取出一个值(当列表中没有值时,对应的key也会被删除)
rpop key从右边取出一个值(当列表中没有值时,对应的key也会被删除)
rpoplpush source_key destination_key从source_key的右边取出一个值,插入到destination_key的左边
lrange key start end按照下标范围获取对应key的元素(从左到右,“0”到“ - 1”代表获取所有元素)
lindex key index获取对应key中指定下标的元素
llen key获取key对应列表的长度
linsert key after value new_value在指定value之后插入一个新的new_value值
linsert key before value new_value在指定value之前插入一个新的new_value值
lrem key count value从左边开始删除count个指定的value值
lset key index value将列表key中下标为index的值替换为value

3、Set类型(集合)

3.1 Set类型简介

  • Redis的Set类型对外提供的功能与List有相似之处,也是用于存储列表数据。其特殊之处在于Set能自动对插入的元素进行去重。当需要存储一个不包含重复数据的列表时,Set是一个理想选择。
  • Set提供了判断某个成员是否在集合内的重要接口,这是List所不具备的功能。
  • Redis的Set是String类型的无序集合。其底层实现实际上是一个value为null的哈希表,因此添加、删除、查找操作的时间复杂度均为O(1)。
  • Set结构基于dict字典实现,而字典是通过哈希表来实现的。这与Java中HashSet的内部实现原理类似,Java的HashSet内部使用HashMap,只不过所有的value都指向同一个对象,Redis的Set结构也是如此。

3.2 常用命令

命令含义
sadd key value1 value2 …将一个或多个元素加入到集合key中
smembers key取出集合key中的所有值
sismember key value判断集合key是否包含指定的value值,若包含返回1,否则返回0
scard key返回集合的元素个数
srem key value1 value2 …删除集合中的指定元素
spop key随机从集合中弹出一个值(当集合中没有值时,对应的key也会被删除)
srandmember key count随机从集合中取出count个值,取出的值不会从集合中删除
smove source_key destination_key value将source_key集合中的value元素移动到destination_key集合中
sinter key1 key2返回两个集合的交集元素
sunion key1 key2返回两个集合的并集元素
sdiff key1 key2返回两个集合的差集元素(以key1为基准)

4、Hash类型(哈希)

4.1 Hash类型简介

  • Redis的Hash是一个键值对集合。
  • 它是一个String类型的field和value的映射表,特别适合用于存储对象,类似于Java中的Map<String, Object>结构。
  • Hash类型对应的数据结构有两种:压缩列表(ziplist)和哈希表(hashtable)。当field - value的长度较短且个数较少时,Redis会使用ziplist结构存储;否则,将使用hashtable结构。

4.2 常用命令

命令含义
hset key field value给key对应的哈希集合中的field设置值为value
hget key field从key对应的哈希集合中的field获取值
hmset key field1 value1 field2 value2 …批量设置哈希集合中的多个field - value对
hexists key field查看哈希表key中是否存在指定的field
hkeys key列出哈希集合key中的所有field
hvals key列出哈希集合key中的所有value
hincrby key field increment给哈希表key中的field值增加指定的增量increment(例如,field原值为2,增量为2,执行后结果为4)
hsetnx key field value仅当哈希表key中的field不存在时,才将其值设置为value

5、Zset类型(有序集合)

5.1 Zset类型简介

  • Redis的有序集合Zset与普通的Set类似,也是一个不包含重复元素的字符串集合。
  • 不同之处在于,有序集合的每个成员都关联了一个评分(score),Redis会根据评分从最低分到最高分的顺序对集合中的成员进行排序。集合成员必须唯一,但评分可以重复。
  • 由于元素是有序的,因此可以根据评分(score)或元素次序(position)快速获取指定范围的元素。同时,访问有序集合的中间元素也非常高效。
  • Zset底层使用了两个数据结构:
    • hash:其作用是关联元素value和权重score,确保元素value的唯一性,并可以通过value快速找到对应的score值。
    • 跳跃表:用于对元素的value按照score进行排序,方便根据score范围获取元素列表。

5.2 常用命令

命令含义
zadd key score1 value1 score2 value2 …将一个或多个元素及其对应的score值加入到有序集合key中
zrange key start stop返回有序集合key中下标在start与stop之间的元素
zrange key start stop withscores返回有序集合key中下标在start与stop之间的元素及其对应的score值
zrangebyscores key min max返回有序集合key中,所有score值介于min和max之间的成员(包括等于min和max的成员)
zrangebyscores key min max withscores返回有序集合key中,所有score值介于min和max之间的成员及其对应的score值(包括等于min和max的成员)
zrevrangebyscores key max min返回有序集合key中,所有score值介于max和min之间的成员,按从大到小排序
zincrby key increment value为有序集合key中的指定元素的score增加指定的增量increment
zrem key value删除有序集合key中指定的value元素
zcount key min max统计有序集合key中,score值在min与max范围内的元素个数
zrank key value返回指定value在有序集合key中的排名,排名从0开始
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值