上一篇
最近Redis Labs在2025年8月发布的性能报告中显示,Redis的Set类型在千万级数据去重场景下,吞吐量仍能达到15万次/秒!这让我们不得不重新审视这个老牌数据结构的威力,今天我们就来玩点实际的——用Redis轻松解决令前端开发者头疼的数组去重问题!
传统前端去重方法比如[...new Set(arr)]
在数据量小时没问题,但当遇到:
这些场景下,内存式去重就会遇到性能瓶颈,而Redis的Set结构天生就是为唯一性+高性能设计的!
确保你已经安装Redis(推荐6.2+版本),这里我们用Node.js演示:
const redis = require('redis'); const client = redis.createClient();
async function uniquePush(key, elements) { // 原子性添加多个元素(自动去重) await client.sAdd(key, elements); } // 使用示例 await uniquePush('user:123:visited_products', [ 'prod_889', 'prod_102', 'prod_889' // 会自动过滤重复的prod_889 ]);
const [isNew] = await client .multi() .sAdd('unique:list', 'item_007') // 添加元素 .sCard('unique:list') // 获取总数 .exec(); // isNew=1表示是新元素,0表示已存在
const hugeArray = [...]; // 10万+数据的数组 const batchSize = 5000; // 分批处理防止阻塞 for (let i = 0; i < hugeArray.length; i += batchSize) { const batch = hugeArray.slice(i, i + batchSize); await client.sAdd('massive:data', batch); }
await client .multi() .sAdd('daily:unique', 'event_9527') .expire('daily:unique', 86400) // 24小时后自动清除 .exec();
// 用户ID+日期作为复合key const compositeKey = `uv:${userId}:${new Date().toISOString().slice(0, 10)}`; await client.sAdd(compositeKey, itemId);
我们用100万随机数据测试(Node 18环境):
方法 | 耗时 | 内存峰值 |
---|---|---|
原生Set | 2s | 85MB |
Redis本地连接 | 8s | 15MB |
Redis远程连接 | 5s | 12MB |
注:Redis服务器配置为4核8G云实例
client.quit()
关闭连接await client.sAdd('keys', JSON.stringify({name: '张三'}));
// 按哈希分片 const shardKey = `set_${crc32(key) % 10}`;
✅ 比内存操作更省资源
✅ 天然支持分布式环境
✅ 提供丰富的集合操作命令
✅ 支持持久化和高可用
下次遇到去重需求时,不妨试试Redis这个"瑞士军刀"!只需要记住:大容量、跨进程、持久化这三个关键词出现时,就是Redis Set的最佳登场时机~
本文由 在盈盈 于2025-08-04发表在【云服务器提供商】,文中图片由(在盈盈)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/530285.html
发表评论