如果有人能帮助我就太好了。我正在尝试在我的 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 命令的结果进行比较。

我希望这是有道理的。


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!