随机生成经纬度并写入Redis
private StringRedisTemplate stringRedisTemplate;
@Autowired
public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) {
this.stringRedisTemplate = stringRedisTemplate;
}
/**
* 有效经度为 -180 到 180 度
* 有效纬度为 -85.05112878 到 85.05112878 度
*
* @throws IOException IO异常
*/
@Test
public void randomGeoLocationTest() throws IOException {
String geoKey = "location_key";
byte[] key = geoKey.getBytes(StandardCharsets.UTF_8);
File file = new File("D:/tmp/mac_369M.txt");
List<String> allMac = FileUtils.readLines(file, StandardCharsets.UTF_8);
log.info("MAC总数:{}", allMac.size());
List<List<String>> partition = Lists.partition(allMac, 10000);
int count = 0;
for (List<String> macList : partition) {
stringRedisTemplate.executePipelined((RedisCallback<Void>) connection -> {
connection.openPipeline();
for (String mac : macList) {
connection.geoCommands().geoAdd(key, new GeoLocation<>(mac.getBytes(StandardCharsets.UTF_8),
new Point(ThreadLocalRandom.current().nextDouble(-180D, 180D), ThreadLocalRandom.current().nextDouble(-85.05112878D, 85.05112878D))));
}
return null;
});
count += macList.size();
log.info("已入库MAC总数:{}", count);
}
}