今天安装 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结果正确,原生的方式就不能用囖,测试结果跟第一次测试结果反过来了....