Redis的数据类型

Redis 支持多种数据类型,其中较为常见的5种类型为:

1、字符串(string):Redis 的最基本数据类型,可以包含任何数据,如文本和二进制数据等。

2、列表(list):由多个字符串组成的列表,可以进行添加、删除和查找等操作。可以通过左侧或右侧添加或删除元素。

3、集合(set):由多个字符串无序、唯一组成的集合,可以进行求交集、并集、差集等复杂的操作。

4、有序集合(sorted set):和集合类似,每个元素都有一个分数,可以通过分数进行排序,并提供复杂的范围查找和交集、并集、差集等操作。

5、哈希表(hash):由多个键值对组成的无序散列表,可以进行添加、删除和查找等操作。

各种数据类型的特点和使用场景如下:

  • 字符串:最基本的数据类型,可用于存储文本、数字等。
  • 列表:适合用于存储有序元素,如消息队列,日志队列等。
  • 集合:适合用于存储不重复元素,可以进行各种集合操作,如求交集、并集、差集等。
  • 有序集合:适合用于存储带权重的元素,并可以按照权重进行排序,如排行榜、字典等。
  • 哈希表:适合用于存储对象,其键可以利用哈希函数算法映射到表中的地址,以实现快速查找。

String类型

在 Redis 中,String 是最基础、最常用的数据类型之一,它可以存储任意格式的字符串。

String类型支持对字符串的读写操作,同时Redis的String类型还支持对字符串进行一些特殊的操作,如:追加字符串、截取子串、在字符串某一位置插入字符等,支持多种不同的数据编码格式。

String 类型在 Redis 中的典型用途是存储缓存、计数器、分布式锁等,同时它还可以支持像字符串拼接、计数器自增、分布式锁释放等常见的业务功能。

String 类型在 Redis 中的常见命令:

1、APPEND:将指定的字符串追加到 key 当前值的末尾。

2、GETRANGE:获取字符串中指定范围内的子串,包括起始和结束位置上的字符。

3、SETRANGE:从指定位置开始,将字符串中的一部分替换为给定的串。

4、STRLEN:返回指定 key 的长度。

5、INCR 和 INCRBY:将指定 key 的值增加 1 或递增固定的整数。

6、DECR 和 DECRBY:将指定 key 的值减少 1 或递减固定的整数。

List类型

Redis 的 list(列表)类型是一个可以存储字符串、整型等类型的有序、可重复集合。其内部使用双向链表来存储数据,并提供了一系列的命令,如LPUSH、RPUSH、LPOP、RPOP 等用于在列表的两端进行操作。

Redis list 类型的一些重要特性:

1、双向链表存储结构:list 内部使用双向链表来存储数据,支持 O(1) 复杂度的头尾插入和删除操作。

2、可重复:list 内部允许相同元素的存在。

3、支持下标访问:list 内部数据可以通过下标进行随机访问,同时提供了一系列访问指定范围(切片)数据的命令,如 LRANGE。

4、支持阻塞操作:采用了生产者消费者模式,支持在list为空时进行阻塞等待,能够实现一些高级功能,如消息队列等。

Redis list 类型的使用场景:

1、消息队列:list可以作为消息队列的底层存储结构,同时支持阻塞式消费。

2、时间序列:list可以维护一个按照时间顺序递增或递减的有序列表。

Redis 中 list 类型常见的操作命令:

1、LPUSH key value [value ...]:在 key对应的列表的头部添加一个或多个value 值,返回添加后列表的长度。

2、RPUSH key value [value ...]:在 key对应的列表的尾部添加一个或多个value 值,返回添加后列表的长度。

3、LPOP key:删除并返回 key对应的列表的头部元素。

4、RPOP key:删除并返回 key 对应的列表的尾部元素。

  • 前面4个命令可以简单的记为“左头右尾”,左操作针对列表头部,右操作针对列表尾部

5、LINDEX key index:返回key对应的列表中 index 位置的元素,index 从 0 开始。

6、LRANGE key start stop:返回 key 对应的列表中从 start 到 stop 位置的所有元素。

7、LREM key count value:从 key 对应的列表中删除value元素,count表示删除的个数,当 count > 0 时,从头到尾删除递归 value 值,count < 0 时,则从尾到头删除递归value值,count = 0 是删除所有递归等于 value 值的元素。

8、LLEN key:返回key对应的列表的长度。

Set类型

Redis Set 类型是一种无序、不重复的数据类型,具有以下特点:

1、存储不重复的元素。Set 中所有的元素都是唯一的,Redis 会自动去重和排重,确保 Set 中元素的唯一性。

2、添加和删除元素操作都非常快。由于 Redis 内部采用了散列表来存储 Set 中的元素,添加和删除元素的时间复杂度均为 O(1)。

3、支持集合运算。Set 还支持求并集、交集和差集等运算操作,方便数据处理和分析。

4、支持随机数操作。Set 还支持从中随机选取一个元素。

根据上述特点,Set 类型适用的场景主要有以下几种:

1、唯一性数据需求的场景,如关注、收藏等。

2、计数去重的场景,如页面点击量统计、用户抽奖等。

3、交集和并集操作的场景,如计算共同好友、共同关注者等。

4、随机取值需求的场景,如抽奖、随机推荐等。

Redis Set 类型有许多常用的命令:

1、SADD key member [member ...]:向 Set 中添加一个或多个成员。

2、SREM key member [member ...]:从 Set 中删除一个或多个成员。

3、SMEMBERS key:返回 Set 中的所有成员。

4、SISMEMBER key member:判断指定成员是否在 Set 中。

5、SINTER key [key ...]:计算多个 Set 的交集。

6、SUNION key [key ...]:计算多个 Set 的并集。

7、SDIFF key [key ...]:计算多个 Set 的差集。

8、SCARD key:返回 Set 的元素数。

9、SRANDMEMBER key [count]:从 Set 中随机获取一个成员或多个成员。

10、SPOP key:从 Set 中弹出一个随机成员。

Sorted Set类型

Redis中的 Sorted Set是一种有序集合数据类型,类似于 Set 数据类型,不同之处在于,每个元素都带有一个分数(score)值,根据分数值的大小来排序。Sorted Set中的元素必须是唯一的,但分数却可以重复。

Sorted Set的应用领域非常广泛,例如:

1、网站访问排行榜,按照访问量(分数值)从高到低排序。

2、实时热门文章排行,按照阅读数(分数值)从高到低排序。

3、用户积分排行榜,按照积分值(分数值)从高到低排序。

以下是Sorted Set类型中常用的命令:

1、ZADD:向 Sorted Set 中添加一个或多个成员,包括该成员的分数值。

2、ZSCORE:获取 Sorted Set 中指定成员的分数值。

3、ZRANGE 和 ZREVRANGE:获取 Sorted Set 中指定排名范围内的成员列表,支持正序和倒序。

4、ZRANK和ZREVRANK:获取指定成员的排名信息,包括升序和降序排名。

5、ZCOUNT:计算 Sorted Set 中分值匹配指定范围的成员数量。

6、ZCARD:获取 Sorted Set 元素的数量。

7、ZINCRBY:将 Sorted Set 中指定成员的分数值递增指定的步长。

8、ZREM:删除 Sorted Set 中指定的一个或多个成员。

9、ZINTERSTORE 和 ZUNIONSTORE:分别用于对多个 Sorted Set 进行交集和并集操作,输出结果作为一个新的 Sorted Set 元素。

10、ZSCAN:在Sorted Set中迭代成员,以获取结果的子集。

Hash类型

Redis中的Hash类型类似于具有字符串键和字符串值的哈希表或关联数组,其中一个键对应一个哈希表,相当于在内部将一个字符串和一个Map进行了组合。

Hash 类型具有以下特点:

1、支持存储多个字段和值:Hash 可以使用一个键存储多个键值对,即每个键对应一个哈希表,每个哈希表中又包含多个字段和值。

2、支持原子操作:Redis 对 Hash 数据结构提供了多种原子操作,可以在一个操作中修改多个键值对。

3、内存空间利用率高:在存储大量数据时,使用Hash可以减少Redis实例的数量,最大程度地利用内存空间,提高 Redis 的性能。

4、方便操作复杂对象:Hash可以方便地存储复杂对象,如JSON格式的对象,从而在缓存和存储方面提供了更复杂的数据结构支持。

Hash 适用于以下场景:

1、缓存数据:Hash 可以用于存储缓存数据,如用户信息、商品信息等,从而提高访问速度并减少数据库查询次数。

2、结构化数据存储:Hash可以用于存储具有结构化数据的对象,并且支持多字段和原子操作,用于处理更复杂的数据存储需求。

以下是Hash类型中常用的命令:

1、HSET key field value [field value ...]:设置 Hash 中一个键的一个或多个字段的值。如果字段不存在,则创建一个新的字段,如果存在则更新其对应的值。

2、HGET key field:获取 Hash 中指定键的指定字段的值。

3、HGETALL key:获取 Hash 中所有的字段和对应的值。

4、HDEL key field [field ...]:删除 Hash 中一个或多个字段。

5、HEXISTS key field:判断 Hash 中是否存在指定的字段。

6、HINCRBY key field increment:对 Hash 中指定字段进行加法操作。如果字段不存在,则先将其初始化为0。increment 可以是负数,也可以是浮点数。

7、HKEYS key:获取 Hash 中所有的字段。

8、HLEN key:获取 Hash 中字段的数量。

9、HMSET key field value [field value ...]:同时设置多个字段的值。

10、HMGET key field [field ...]:获取多个字段的值。

11、HSETNX key field value:只在指定的字段不存在时,才设置 Hash 中的字段值。

2.3.11 【案例】Hash操作示例

本示例通过以下需求展示Hash类型的常见操作。

假设有一个在线教育平台,需要对课程进行管理存储,支持以下操作:

1、添加一门新课程;

2、查看某门课程的基本信息,如名称和讲师等;

3、更新一门课程的信息,如名称、讲师、价格等;

4、删除某门课程;

5、记录某门课程的访问量;

6、查询某门课程的全部信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值