php predis GEORADIUS 无法返回距离问题

今天安装 predis ^1.1 版本,按之前的项目使用方式使用GEORADIUS 发现 WITHDIST, 或者 WITHCOORD无效

无法返回距离或者经纬度。只能返回保存对象,一开始怀疑是否本地 reids 版本导致,于是进行代码测试

代码如下

// 经度
$longitude = (float)'110.153724';
// 纬度
$latitude = (float) '22.646775';
// 范围
$radius = (float) '100';
// 距离
$unit = 'km';
// WITHCOORD 返回目标的经纬度,WITHDIST 返回距离中心点的距离,
$options = [
'WITHDIST',
'WITHCOORD',
'ASC'
];
// 原生redis查询方式
$redis = new \Redis();
$redis->connect('127.0.0.1');
$result_1 = $redis->geoRadius('xiadmin.com', $longitude, $latitude, $radius, $unit, $options); 
// predis查询方式
$redisClient = new Predis();
$result_2 = $redisClient->georadius('xiadmin.com', $longitude, $latitude, $radius, $unit, $options);

测试结果

调试结果时发现同样的参数原生查询方式没有问题,那就是predis版本的版本问题,翻阅源码果然是options参数【第五个参数】做了修改

也就是说改成了键值对方式。排序也必须是键值对。修改代码

// 经度
$longitude = (float)'110.153724';
// 纬度
$latitude = (float) '22.646775';
// 范围
$radius = (float) '100';
// 距离
$unit = 'km';
// WITHCOORD 返回目标的经纬度,WITHDIST 返回距离中心点的距离。这里修改为键值对方式
$options = [
'WITHDIST' => true,
'WITHCOORD' => true,
'SORT' => 'ASC'
];
// 原生redis查询方式
$redis = new \Redis();
$redis->connect('127.0.0.1');
$result_1 = $redis->geoRadius('xiadmin.com', $longitude, $latitude, $radius, $unit, $options); 
// predis查询方式
$redisClient = new Predis();
$result_2 = $redisClient->georadius('xiadmin.com', $longitude, $latitude, $radius, $unit, $options);

运行发现Predis结果正确,原生的方式就不能用囖,测试结果跟第一次测试结果反过来了….

 

为TA充电
共{{data.count}}人
人已赞赏
工作日志转贴的文章前端

百度地图 vue-baidu-map 使用教程以及案列

2021-6-1 17:26:01

工作日志随笔

sublime text3 生成函数注释

2020-10-5 17:00:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧