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

相关内容

热门资讯

安卓系统不推送更新,揭秘背后的... 最近是不是发现你的安卓手机有点儿“懒”啊?更新推送总是慢吞吞的,让人等得花儿都谢了。别急,今天就来给...
ape格式转换安卓系统,享受音... 你有没有想过,你的安卓手机里的ape格式音乐文件,竟然可以通过一个小小的转换,焕发出全新的生命力?没...
获取安卓系统加载器,核心功能与... 你有没有想过,你的安卓手机里那些神奇的软件和游戏是怎么被安装到你的设备上的呢?没错,就是通过一个叫做...
安卓系统文件夹在哪,安卓系统文... 你有没有遇到过这样的情况:手机里乱糟糟的,想找个文件却找不到?别急,今天就来给你揭秘安卓系统文件夹的...
安卓手感最好的裸机系统,安卓手... 安卓手感最好的裸机系统:探索极致体验的秘密武器在数字世界中,我们常常被各种功能和复杂操作所包围,尤其...
nas如何刷回安卓系统,轻松刷... 你有没有想过,你的NAS(网络附加存储)突然间变成了一个安卓的小天地?别急,这可不是什么天方夜谭,而...
荣耀沿用的安卓系统吗,打造个性... 你有没有注意到,最近荣耀的新机发布,大家都在热议一个问题:荣耀沿用的安卓系统吗?这可是个让人好奇不已...
快麦erp系统安卓下载,一键下... 你有没有听说最近一款叫做快麦ERP系统的软件在安卓平台上大受欢迎呢?没错,就是那个能让你企业管理如虎...
华为安卓系统下载app,一步到... 你有没有发现,最近华为手机的用户们都在忙活一件大事儿?没错,那就是下载安卓系统上的各种app啦!这可...
原生安卓系统游戏模式,畅享沉浸... 亲爱的手机游戏爱好者们,你是否曾为手机游戏运行不畅而烦恼?又或者,你是否渴望在游戏中获得更极致的体验...
安卓9改系统语言设置,轻松切换... 你有没有发现,手机里的语言设置有时候真的让人头疼?比如说,你突然想用一下安卓9的系统语言设置,结果发...
怎么升级安卓最新系统,畅享安卓... 亲爱的手机控们,你是不是也和我一样,对安卓系统的更新充满了期待?每次系统升级,都仿佛给我们的手机带来...
安卓系统电视跳舞毯,家庭娱乐新... 你有没有想过,家里的电视除了用来追剧、看电影,还能变成一个充满活力的娱乐中心?没错,我要给你介绍的就...
安卓系统维护周期,全方位守护您... 亲爱的手机控们,你是不是也和我一样,对安卓系统的维护周期充满了好奇呢?毕竟,我们的手机可是我们日常生...
安卓系统电脑怎么往下滑,一扫即... 你有没有发现,用安卓系统电脑的时候,有时候屏幕上会出现一些小图标或者应用,你想要快速浏览或者切换,却...
手机中判断安卓系统苹果系统js... 你有没有想过,你的手机里到底装的是安卓系统还是苹果系统呢?这可不是一个小问题哦,因为不同的系统,就像...
window系统和安卓系统还原... 你有没有遇到过手机或电脑突然卡顿,或者不小心删掉了重要的文件?别急,今天就来给你详细说说如何让win...
安卓系统打电话变声器,轻松实现... 安卓系统打电话变声器:探索数字时代的通信革新在数字化浪潮中,智能手机已经成为我们生活中不可或缺的一部...
android系统和安卓哪个好... 说到手机操作系统,你是不是也和我一样,对Android系统和安卓系统傻傻分不清楚呢?别急,今天就来给...
米柚系统是不是安卓,基于安卓的... 亲爱的读者,你是否曾在手机的选择上犹豫不决,尤其是当面对那些自称是安卓系统但又有自己特色的操作系统时...