如何缓存 MySQL 地理空间查询?

How do I cache MySQL geospatial query?

我有一个带有 redis 缓存和 MySQL 数据库的 API 服务器。我将在 MySQL 中保存地理空间数据,我想提供一个 API 用于 在给定的多边形 中找到一些点 。

例如,
GET /api/v1/stores?boundary=45.9527556390094, -113.39711818925397,26.27578565710524, -79.64711879402736(左上,右下&纬度,经度)

我想把 redis 缓存放在 API 和 MySQL 之间,因为我认为数据库在处理 API 请求时会产生瓶颈。我将在 MySQL.

中使用 ST_GEOMFROMTEXT, ST_WITHIN 进行地理空间查询

我发现很难为来自 MySQL 的地理空间查询结果设计缓存键。每个用户都会给出非常不同的地理空间边界值,因此不能将给定的边界值作为redis keys。

在这种情况下,如何缓存来自 MySQL 的地理空间查询?

你每次都会得到完全相同的多边形吗?我怀疑不是。 lat/lng是根据手机的GPS坐标算出来的?如果不完全相同,则在查询后没有可缓存的内容。唯一的希望是缓存查询的 运行ning。

改善延迟有助于提高吞吐量。除非整个数据集不适合 buffer_pool,我希望你能够 运行 每秒大约 1000 个查询(没有 Redis)。

关于“查找最近”的更多讨论:http://mysql.rjweb.org/doc.php/find_nearest_in_mysql 它包括一个 table 多少小数位是有用的。 (小数点后 6 位或 7 位应该足够了。)