面试中,探寻Redis带来的查找附近人的机遇(redis面试查附近人)
探寻Redis带来的查找附近人的机遇
由于社交网站及日常生活中大量使用位置概念,因此查找附近人的可能性也被越来越多的应用。最近,Redis开发者必须考虑如何支持附近的查找。
Redis是一种新的高性能开源内存数据库,其特点是高性能、高可用性和动态扩展性。与其他数据存储不同,Redis存储内容更趋于特定应用。比如此次所谓的查找附近人功能,Redis可以提供一个维护活跃用户坐标位置的功能,同时也可以快速比较出所有附近位置的用户,也是有益于所考虑附近用户圆形搜索的新尝试。
我们可以对任何给定的用户坐标,用以下代码来实现查找附近的人的功能:
// longitude:给定的用户的经度
// latitude:给定的用户的纬度// radius:查找的搜索范围的半径(单位:公里)
// 计算给定用户坐标点的地理位置正方形范围边界double delta = radius/6371.0;
double longitude_min = longitude - delta;double longitude_max = longitude + delta;
double latitude_min = latitude - delta;double latitude_max = latitude + delta;
redis> ZRANGEBYSCORE user_position_zset longitude_min longitude_max WITHSCORES+------------------+------------------+
| 318654207 | 1.3237797-23.6554|| 314020301 | 1.5346161-22.5446|
+------------------+------------------+
redis> ZRANGEBYSCORE user_position_zset latitude_min latitude_max WITHSCORES+------------------+------------------+
| 320824702 | 1.5346161-22.5446|| 314221007 | 1.3459832-22.9921|
+------------------+------------------+
// Union redis> ZUNIONSTORE nearby_users 2 user_position_zset
OK
// 输出附近的用户Idredis> ZRANGE nearby_users 0 -1
+------------------+| 318654207 |
| 314020301 || 320824702 |
| 314221007 |+------------------+
相比传统的地理搜索,Redis的圆形搜索功能更具有普适性,而且可以允许用户在低延迟时间下获得最佳的搜索结果。此外,Redis还可以搭配算法提高效率。
本文所述,探寻Redis带来的查找附近人的机遇,Redis用其简单易用的操作语句保持数据的实时更新,同时拥有高性能、高可用性和动态扩展性的特点,使得可以轻松实现圆形搜索功能,可以带来极大的便利性。