当前过程如下:
1.取得长度为24的号码。
2.如果该数字在当前数据集中重复,则返回true;否则,返回true。否则,返回false并使数字加入数据集。
现在,我使用redis集类型来存储数据集。问题是,现在的存储容量已超过5G,这导致数据集随着用户的增加而变得庞大。
如果我想减少存储量并保持快速检测速度,我可以选择任何计划吗?甚至替换redis也可以。
直到现在,我已经考虑过使用树结构来存储数据集而不是redis set类型。但是当我使用php数组(如树)来存储数据集时。存储空间更大。
function isUnique($mobile){
$arr = str_split($mobile, 10);
global $tree;
$isUnique = false;
$tmp = $tree;
foreach($arr as $item){
if(! isset($tmp[$item])){
$isUnique = true;
break;
}
$tmp = $tmp[$item];
}
unset($tmp);
if($isUnique){
$tmp = &$tree;
$keys = [];
foreach($arr as $value){
if(empty($tmp[$value])){
$tmp[$value] = [];
}
$tmp = &$tmp[$value];
}
}
unset($tmp);
return $isUnique;
}
朋友们建议使用位图保存数据。但该数字为24位长,该位图仍会用尽存储空间。
任何人都可以提出一些想法,思考很多。