普通集群的redis有啥特殊场景解决不了的问题吗

来源:4-19 基于Redis实现真正高可用的锁--RedLock

洪小才

2023-01-15

视频里没有说,可以在这里补充一下吗?大师

写回答

1回答

大能老师

2023-01-18

Redis常见的使用场景:

缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜。

使用场景比较多,但是如果你自己观察这些场景,可以发现有几个特点:以下列几个场景来进行分析

1、数据量比较小

这个也和redis的设计有关系,redis的设计是存储在内存里面的,注定无法存储海量数据,所以对于海量数据的应用场景比较无力,无法存储大规模数据,所以redis无法应用在海量数据存储的场景。业界通常使用HDFS等方案来存储大规模数据。同时Redis的数据存储数量也无法超过数据库,如果需要如果数据库某张大表需要频繁查询,但是数据命中都比较无规律,那么需要频繁导致大表内数据到redis内存不断IO加载,也会引发内存淘汰策略,因此,在这种场景下Redis的使用也比较受限。

2、非计算密集型场景

如果仔细分析以上场景,可以发现大部分场景都是存和取,计算类型的特别少,顶多是取个并集或者交集。如果对于数据密集型的场景,比如海量数据实时计算,海量数据离线计算,大规模并行计算等,redis也是处理不了的。业界通常在Hadoop生态的基础上,使用MapReduce、Spark等的并行计算来进行海量数据的处理。当然计算只是海量数据解决方案的其中一个环节,期间还涉及数据清洗,数据采集等等环节,有兴趣可以进行更深了解。

3、非检索查询场景

redis虽然支持多种数据结构,有着优秀的数据存取性能,更多可参考《Redis设计与实现》这本书,但是数据结构并没有特别针对查询进行优化,比如设计内存索引体系,或者也没有类似es那种倒排索引机制来加速检索效果。对于检索相关场景业界通常使用ES来进行处理。

4、媒体类数据无关

redis对于媒体类或者文档类数据的处理也比较无力,无论是存储还是处理或者检索,都比较无力,第一是媒体类数据比较大,redis又是基于内存的数据库,存储比较受限,另外如果将媒体数据进行序列号后进行存储,那么对媒体内容的检索又会造成负担。业界对于文档类数据存储采用mangoDB,对于媒体类的存储,一般依赖于公有云的基础设施和ai来进行音频识别和图像识别。这期间又涉及很多云计算和机器学习的知识,有兴趣可自行了解一下。


综上,同学可以针对Redis的设计,容量,计算模式,瓶颈等诸多方面去分析redis的不足,就可以自行分析出Redis更多不适用哪些场景。



1
0

Java分布式架构设计与开发实战

项目贯穿式讲解,真正将理论与实战相结合

325 学习 · 74 问题

查看课程