|
7、效率优化
现在的 find_random() 函数可以实现“摇一摇”功能, 但它的效率并不高: 因为程序每次执行这个函数的时候都需要重新执行 find_nearby() 函数以查找用户附近的位置, 然而大部分用户的位置并不经常改变, 并且 GEORADIUSBYMEMBER 命令的执行代价并不低, 因此每次执行 find_random() 都重新执行 find_nearby() 是一种非常低效的做法。
为了优化 find_random() 的效率, 我们可以为 find_random() 的结果创建缓存: 把每个执行“摇一摇”的用户的 find_nearby() 结果储存到一个 Redis 集合里面, 并设置一个过期时间(比如 5 分钟), 然后通过对集合使用 SRANDMEMBER 来随机地获取用户。 这样用户在指定过期时间内执行的所有“摇一摇”操作都只会引起一次 GEORADIUSBYMEMBER , 这将极大地提高 find_random() 的执行效率。
另外, 如果用户密集地聚集在一起, 那么通过使用 GEORADIUSBYMEMBER 命令提供的 COUNT 参数可以有效地减少指定范围内的用户数量, 这可以提高 find_nearby() 的效率, 从而提高 find_random() 的效率。
因为篇幅关系, 优化版的 find_random() 的具体实现这里就不给出了, 有兴趣的读者可以自己尝试完成这个函数。 |
|