Redis数据类型详解
admin
2024-01-22 01:00:56
0

官方文档

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、在线用户数,共同好友数等。

相关内容

热门资讯

热点推荐“贝众乐游到底有没有透... 热点推荐“贝众乐游到底有没有透视挂吗”原来真的有挂是一款可以让一直输的玩家,快速成为一个“必胜”的a...
热点推荐“88娱乐城到底有没有... 热点推荐“88娱乐城到底有没有透视挂吗”原来真的有挂;原来确实真的有挂(需添加指定薇7198902获...
热点推荐“传奇德州到底有没有透... 您好,传奇德州这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
热点推荐“精品乐清麻将到底有没... 热点推荐“精品乐清麻将到底有没有透视挂吗”原来真的有挂是一款可以让一直输的玩家,快速成为一个“必胜”...
热点推荐“湘叶娱乐到底有没有透... 热点推荐“湘叶娱乐到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能...
热点推荐“新友茶社到底有没有透... 您好,新友茶社这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
热点推荐“网上斗牛到底有没有透... 亲,网上斗牛这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,网上斗牛的开挂软件,名...
热点推荐“雀悦诏安麻将到底有没... 雀悦诏安麻将这个游戏其实有挂的,确实是有挂的,需要了解加客服微信:【7198902】, 很多玩家在这...
热点推荐“棋牌室到底有没有透视... 您好:棋牌室确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发现...
热点推荐“微友联盟到底有没有透... 亲,微友联盟这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,微友联盟的开挂软件,名...
热点推荐“众联到底有没有透视挂... 热点推荐“众联到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能够完...
热点推荐“雀神麻将到底有没有透... 热点推荐“雀神麻将到底有没有透视挂吗”原来真的有挂是一款可以让一直输的玩家,快速成为一个“必胜”的a...
热点推荐“越记乡游到底有没有透... 热点推荐“越记乡游到底有没有透视挂吗”原来真的有挂;原来确实真的有挂(需添加指定薇7198902获取...
热点推荐“麻友圈2贵州麻将到底... 您好:麻友圈2贵州麻将确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打...
热点推荐“乐天棋牌到底有没有透... 热点推荐“乐天棋牌到底有没有透视挂吗”原来真的有挂是一款可以让一直输的玩家,快速成为一个“必胜”的a...
热点推荐“海星到底有没有透视挂... 您好:海星确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发现很...
热点推荐“潮汕馆到底有没有透视... 您好:潮汕馆确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发现...
热点推荐“乐享贵州麻将到底有没... 乐享贵州麻将这个游戏其实有挂的,确实是有挂的,需要了解加客服微信:【7198902】, 很多玩家在这...
热点推荐“汇友娱乐到底有没有透... 您好:汇友娱乐确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发...
热点推荐“hhpoker脚本到... 热点推荐“hhpoker脚本到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的...