Laravel怎样对大数据集做分片缓存_Laravel对大数据集做分片缓存方法【存储】

冬瑶姑娘_2242

冬瑶姑娘_2242

2026-04-20

345人浏览

原创

大数据集分片缓存有五种方法:一、按主键范围分片;二、按哈希值分片;三、按字段前缀分片;四、用缓存标签统一管理分片;五、流式序列化+分块存储。

laravel怎样对大数据集做分片缓存_laravel对大数据集做分片缓存方法【存储】

当搜索或查询返回的数据量过大,超出单次缓存键的合理容量(如 Redis 单 key 限制、序列化开销剧增、网络传输延迟升高),直接缓存完整结果将导致性能下降甚至失败。以下是针对大数据集实施分片缓存的具体方法:

一、按主键范围分片缓存

将大数据集按模型主键(如 ID)划分为连续区间,每个区间独立缓存,避免单 key 负载过重,同时支持按需加载与局部刷新。

1、计算数据总量并设定分片大小,例如每片 500 条记录:$total = Post::count(); $chunkSize = 500;

2、遍历所有分片区间,使用 Cache::put() 分别缓存:for ($i = 0; $i skip($offset)->take($chunkSize)->get(); Cache::put("posts:chunk:{$i}", $posts, 3600); }

3、查询时根据目标 ID 所属区间计算分片编号:$chunkIndex = (int) floor($targetId / $chunkSize); $cached = Cache::get("posts:chunk:{$chunkIndex}");

4、从缓存片段中筛选出匹配记录:$result = $cached->firstWhere('id', $targetId);

二、按哈希值分片缓存

利用一致性哈希或简单取模方式将记录均匀分散至多个缓存键,提升并发读写能力,并降低单点失效影响。

1、为每条记录生成哈希标识,例如 md5($record->id . $record->updated_at);

2、对哈希值进行取模运算确定归属分片:$shard = abs(crc32($hash)) % 16;

3、将记录序列化后存入对应分片键:Cache::put("posts:shard:{$shard}", $serializedRecords, 7200);

4、查询时复用相同哈希逻辑定位分片,再在本地集合中检索具体项。

三、按字段前缀分片缓存

适用于具有强分类特征的大数据集(如日志、商品 SKU、用户地域),以高频离散字段为维度切分,便于定向清除与批量预热。

1、提取分类字段值并标准化,例如城市名转小写并去除空格:$cityKey = strtolower(str_replace(' ', '', $post->city));

2、构造带前缀的缓存键:$cacheKey = "posts:city:{$cityKey}";

Laravel Cloud
Laravel Cloud

Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。

下载

3、使用 Cache::remember() 缓存该城市下全部文章:Cache::remember($cacheKey, 1800, fn() => Post::where('city', $post->city)->get());

4、当某城市数据更新时,仅清除对应前缀键:Cache::forget("posts:city:shenzhen");

四、使用 Laravel 缓存标签配合分片

借助 Redis 或 Memcached 支持的缓存标签功能,为同一逻辑数据集下的多个分片打上统一标签,实现原子性批量管理。

1、在 config/cache.php 中确认所选驱动支持标签(如 redis、memcached),且未使用 file 或 array 驱动;

2、为每个分片添加共同标签:Cache::tags(['posts', 'sharded'])->put("posts:part:1", $data1, 3600); Cache::tags(['posts', 'sharded'])->put("posts:part:2", $data2, 3600);

3、刷新整个数据集时,执行:Cache::tags(['posts', 'sharded'])->flush();

4、注意避免标签滥用导致元数据膨胀,建议控制标签层级不超过两层。

五、采用流式序列化 + 分片存储策略

对超大数据集(如百万级日志导出),放弃完整对象缓存,改用紧凑格式分块存储原始字段,由应用层组装结果。

1、查询时只 select 关键字段并 chunk 处理:Post::select('id', 'title', 'slug')->chunk(1000, function ($chunk) use ($shardId) { $rows = $chunk->map(fn($p) => [$p->id, $p->title, $p->slug])->toArray(); Cache::put("posts:raw:{$shardId}", json_encode($rows), 7200); });

2、缓存值为纯 JSON 字符串而非 Eloquent 集合,节省序列化开销;

3、读取时用 json_decode() 解析并构建轻量 DTO 对象,避免模型实例化成本;

4、分片 ID 可基于时间戳或自增序号生成,确保可预测性与顺序性。

相关专题

更多
大数据分析工具有哪四个
大数据分析工具有哪四个

大数据分析的四个工具分别是rapidminer、Hpcc、Hadoop和Pentaho bi。大数据分析用于从各种来源生成的原始数据中提取有价值的数据。这些数据帮助我们获得有意义的见解、隐藏的模式、未知的相关性、市场趋势等等,具体取决于行业。大数据分析的主要动机是提供有价值的见解,以便为未来做出更好的决策。php中文网为大家带来了大数据分析的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

5976

5

Java 大数据处理基础(Hadoop 方向)
Java 大数据处理基础(Hadoop 方向)

本专题聚焦 Java 在大数据离线处理场景中的核心应用,系统讲解 Hadoop 生态的基本原理、HDFS 文件系统操作、MapReduce 编程模型、作业优化策略以及常见数据处理流程。通过实际示例(如日志分析、批处理任务),帮助学习者掌握使用 Java 构建高效大数据处理程序的完整方法。

2025.12.08

1269

12

大数据专业学习教程
大数据专业学习教程

本专题整合了大数据专业学习相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

243

5

python处理大数据合集
python处理大数据合集

本专题整合了python处理大数据相关教程,阅读专题下面的文章了解更多详细内容。

2026.01.05

526

22

laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

877

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

855

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

2508

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

4701

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

6870

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 221人学习

Composer手册
Composer手册

共0课时 | 0人学习