使用redis从存储集获取所有唯一的分数?

pbwdgjma  于 2021-06-08  发布在  Redis
关注(0)|答案(1)|浏览(459)

使用以下代码添加地理数据

  1. jedis.geoadd("storegeodata", 51.5074, 0.1278, "London");
  2. //while member string is mostly json
  3. jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London}");
  4. jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London, lat: 51.5074, lon: 0.1278}");

当geohash由于成员字符串不同而被复制时,如何检索基于geohash的唯一值以避免冗余

  1. public Map<String, Object> checkRedisGeo(double lat, double lon, Jedis j) {
  2. Map<String, Object> result = new HashMap<>();
  3. try
  4. {
  5. GeoRadiusParam param = GeoRadiusParam.geoRadiusParam();
  6. param.sortAscending();
  7. param.withDist();
  8. param.count(1);
  9. System.out.println("lat :"+lat+" , lon :"+lon);
  10. List<GeoRadiusResponse> response = j.georadius("commander",
  11. lon,lat, 150, GeoUnit.M, param);
  12. //System.out.println(response.size()+" size");
  13. if(response.size() > 0)
  14. {
  15. for (GeoRadiusResponse geoRadiusResponse : response) {
  16. System.out.println("lat :"+lat+" , lon :"+lon+", stringmember :"+geoRadiusResponse.getMemberByString());
  17. //System.out.println(geoRadiusResponse.getDistance());
  18. Object[] data= {geoRadiusResponse.getMemberByString()};
  19. System.out.println(data);
  20. result.put("result", data);
  21. }
  22. }else {
  23. // sendEvents(streamEvent, null, streamEventChunk);
  24. System.out.println("E");
  25. }
  26. } catch (Exception e) {
  27. LOGGER.error("checkRedisGeo err : "+e);
  28. }
  29. return result;
  30. }

哪个检索结果但如何根据geohash/score值过滤掉,如何得到所有不同的分数?
下面是冗余数据示例

cwtwac6a

cwtwac6a1#

通过比较分数可以得到重复的和唯一的分数,因为分数是唯一的,并且为同一个分数存储了多个成员,下面是同一个分数的代码

  1. Double previous_score = 0.0;
  2. int DuplincatesCount = 0;
  3. int UniqueCount = 0;
  4. Set<String> values = jedis.zrange("rediskey", 0, -1);// get all the members
  5. for (String member : values) {
  6. Double current_score = jedis.zscore("rediskey", member);//each member looped
  7. if (Double.compare(current_score, previous_score) == 0) { //comparing current score with previous
  8. // score
  9. DuplincatesCount++;
  10. } else {
  11. UniqueCount++;
  12. }
  13. previous_score = current_score;// score mapping
  14. }
  15. System.out.println("Duplincates entry " + DuplincatesCount);
  16. System.out.println("Unique entry " + UniqueCount);
展开查看全部

相关问题