Redis数据类型详解

官方文档

https://redis.io/docs/data-types/

五种基础数据类型

String

简介

Redis 字符串存储字节序列,包括文本、序列化对象和二进制数组。因此,字符串是最基本的 Redis 数据类型。它们通常用于缓存,但它们支持额外的功能,使您也可以实现计数器和执行按位运算。

结构存储的值

可以是字符串、整数或浮点数

结构的读写能力

对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作;

参考命令

https://redis.io/commands/?group=string

实战场景

1.缓存

经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力

2.计数器

redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。

3.分布式锁

setNX命令实现

Lists

简介

Redis中的List其实就是链表(Redis用双端链表实现List)。
使用List结构。我们可以轻松地实现最新消息排队功能(比如新浪微博的TimeLine)List的另一个应用就是消息队列,可以利用List的 PUSH 操作,将任务存放在List中,然后工作线程再用 POP 操作将任务取出进行执行。

参考命令

https://redis.io/commands/?group=list

实战场景

1.微博TimeLine: 有人发布微博,用lpush加入时间轴,展示新的列表信息。
2.消息队列

sets

简介

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

参考命令

https://redis.io/commands/?group=set

应用场景

1.跟踪唯一项目(例如,跟踪访问给定博客文章的所有唯一 IP 地址)。
2.表示关系(例如,具有给定角色的所有用户的集合)。
3.执行常见的集合运算,例如交集、并集和差集。
4.标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
5.点赞,或点踩,收藏等,可以放到set中实现

hashes

简介

Redis 哈希是结构化为字段值对集合的记录类型。您可以使用散列来表示基本对象并存储计数器分组等。

参考命令

https://redis.io/commands/?group=hash

使用场景

缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等

sorted sets(ZSet)

简介

Redis 有序集合和集合一样也是。string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。

有序集合实现的方式

1.压缩链表

ziplist是为了提高存储效率而设计的一种特殊编码的双向链表。它可以存储字符串或者整数,存储整数时是采用整数的二进制而不是字符串形式存储。它能在O(1)的时间复杂度下完成list两端的push和pop操作。但是因为每次操作都需要重新分配ziplist的内存,所以实际复杂度和ziplist的内存使用量相关

2.跳跃表(zSkiplist)

跳跃表的性能可以保证在查找,删除,添加等操作的时候在对数期望时间内完成,这个性能是可以和平衡树来相比较的,而且在实现方面比平衡树要优雅,这是采用跳跃表的主要原因。跳跃表的复杂度是O(log(n))。

参考命令

https://redis.io/commands/?group=sorted-set

应用场景

1.排行榜。例如,您可以使用排序集轻松维护大型在线游戏中最高分的有序列表。
2.速率限制器。特别是,您可以使用排序集来构建滑动窗口速率限制器,以防止过多的 API 请求。

Streams

Redis Streams(Redis5.0之后新增)

参考命令

https://redis.io/commands/?group=streams

特殊类型

geospatial

简介

这个功能可以推算地理位置的信息: 两地之间的距离, 方圆几里的人

参考命令

https://redis.io/commands/?group=geo

应用场景

Redis 地理空间索引让您可以存储坐标并进行搜索。此数据结构可用于查找给定半径或边界框内的附近点。

bitmaps(位图)

简介

Redis 位图是字符串数据类型的扩展,可让您将字符串视为位向量。您还可以对一个或多个字符串执行按位运算

参考命令

https://redis.io/commands/?group=bitmap

应用场景

比如:统计用户信息,活跃,不活跃! 登录,未登录! 打卡,不打卡! 两个状态的,都可以使用 Bitmaps!
如果存储一年的打卡状态需要多少内存呢? 365 天 = 365 bit 1字节 = 8bit 46 个字节左右!

bitfields(Redis 位域)

简介

有效地将多个计数器编码为字符串值。位域提供原子获取、设置和递增操作,并支持不同的溢出策略

参考命令

https://redis.io/commands/bitfield/

应用场景

附近的人 ==> 获得所有附近的人的地址, 定位, 通过半径来查询

HyperLogLog(基数统计)

简介

数据结构提供了对大集合的基数(即元素的数量)的概率估计。有关详细信息

参考命令

https://redis.io/commands/?group=hyperloglog

应用场景

这个结构可以非常省内存的去统计各种计数,比如注册 IP 数、每日访问 IP 数、页面实时UV、在线用户数,共同好友数等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis中有多种数据结构,其中最常用且基本的数据结构是字符串(string)。Redis中的字符串和C语言中的字符串类型有一些区别。在Redis中,字符串不仅可以存储文本字符串,还可以存储数字、图片、音频等更复杂的二进制数据。字符串在Redis中被广泛用于缓存、数据存储和消息传递等方面。 Redis还支持其他数据结构,如哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)和位图(Bitmap)等。每种数据结构都有自己的特点和适用场景,可以根据实际需求选择合适的数据结构来存储和操作数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Redis五种数据结构详解](https://blog.csdn.net/hyunbar/article/details/108354442)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [[redis] 10 种数据结构详解](https://blog.csdn.net/jarvan5/article/details/122868240)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值