gpt4 book ai didi

mysql - 在 Redis 中存储具有地理数据的对象列表的最佳方式

转载 作者:行者123 更新时间:2023-11-29 07:37:22 25 4
gpt4 key购买 nike

如果有人能帮助我就太好了。我正在尝试在我的 cakephp 框架项目中实现 Radis 缓存。

在我的项目中有一个模块,它的数据经常与 mysql 查询更新和选择一起使用。所以我计划将模块数据保存在 radis 缓存中。

以下是我想保留在缓存中的对象的架构

 `user_id` int(11) NOT NULL AUTO_INCREMENT,
`owner_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
`is_login` smallint(1) NOT NULL DEFAULT '0',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0=>on walk,1=>on run',
`manual_busy` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'used when user mark himself busy',
`is_idle` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'keep record if user moving or not',
`lat` varchar(20) NOT NULL COMMENT 'where the user is at present',
`lng` varchar(20) NOT NULL

保存这些类型的对象后,我想根据“status=1”、“owner_id=2”和“manual_busy=0”等条件搜索最近的用户

为了最近的用户比较,我将使用地理经纬度。

我查看了 Radis 文档,发现了一些地理函数 https://redis.io/commands/georadius但 georadius 命令不适用于 HMSET 键。

如果有人使用相同的功能,请提出解决方案。

谢谢

最佳答案

一个选项是使用 GEOADD 命令创建一组排序的用户位置,然后不将纬度/经度存储在用户对象中,而是存储将用户位置添加到地理集中时使用的键。

比如

GEOADD Locations 41.8883 -87.6323 "User1"
HMSET userhashkey geokey "User1"

然后,一旦您获得了要在地理上搜索的用户列表,就可以将 geokey 字段中的值与 GEORADIUS 命令的结果进行比较。

我希望这是有道理的。

关于mysql - 在 Redis 中存储具有地理数据的对象列表的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com