Redis GEO地理位置

编辑于 2022-03-31 06:04:25 阅读 997

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

基于此可以实现附近的人,附近的店铺等功能

$redis = new Redis();
$redis->connect("docker-redis", 6379);

//$r=$redis->geoadd('citys', 114.09981,33.585519, 'taiwei');
//$r=$redis->geoadd('citys', 114.070524,33.59067, 'dongwaitan');
//$r=$redis->geoadd('citys', 113.971066,33.577242, 'luohexi');

//两个成员之间的距离
//$r=$redis->geodist('citys', 'taiwei', 'luohexi', 'km');
//$r=$redis->geodist('citys', 'taiwei', 'dongwaitan', 'm');

//$r=$redis->geopos('citys', 'taiwei');
$r=$redis->geohash('citys', 'luohexi');

//$r=$redis->georadiusbymember('citys', 'taiwei', 500, 'km');
//$r = $redis->georadius('citys', 114.09981, 33.585519, '500', 'km', [
//    'count' => 10,
////    'store'=>'citys2',
//    'storedist'=>'citys3',
//    'desc',
////    'WITHCOORD',
////    'WITHDIST',
////    'WITHHASH'
//]);
//var_dump($redis->rawCommand('georadius', 'citys', '114', '30', '100', 'km', 'ASC'));
//删除成员
//$r=$redis->zRem('citys', 'taiwei');
var_dump($r);

有序集合

$redis = new Redis();
$redis->connect("docker-redis", 6379);

//$ok=$redis->zAdd('list', -1, 'a', -2, 'b', -3, 'c',0, 'd', 1, 'e', 2, 'f', 3, 'g');
//var_dump($ok);exit;
//$ok=$redis->zAdd('list2', -1, 'a', -2, 'b', -3, 'c');
//var_dump($ok);exit;

//$list=$redis->zRange('list', 1, 3);//分数升序,取索引1~3之间的值。b,a,d
//$list=$redis->zRange('list', 0, -1, ['withscores'=>true]);//分数升序,取全部
//$list=$redis->zRevRange('list', 1, 3);//分数降序,取索引1~3之间的值。f,e,d
//$list=$redis->zRevRange('list', 0, -1);//分数降序,取全部
//$list=$redis->zrangebyscore('list', 0, 3);//分数范围内的成员,分数从低到高排序,['d', 'e', 'f', 'g']
//$list=$redis->zRevRangeByScore('list', 3, 0);//分数范围内的成员,分数从高到低排序,['g','f', 'e', 'd']

$list=$redis->zRangeByLex('list', '-', '+');//获取全部成员

//$score=$redis->zScore('list', 'g');//取分数,3
//$count=$redis->zCount('list', -1, 1);//分数范围内的总数,start<end,3(['a', 'd', 'e'])
//$count=$redis->zCard('list');//成员总数
//var_dump($count);exit;

//$r=$redis->zRem('list', 'a');//删除a
//$r=$redis->zIncrBy('list', 10, 'g');//增加分数,一次加10,可以统计接口的访问此时

//$rank=$redis->zRank('list', 'd');//分数升序,获取某个key的排名,排名从0开始
//$rank=$redis->zRevRank('list', 'd');//分数降序,获取某个key的排名,排名从0开始
//var_dump($rank);exit;

//求交集
//$ok=$redis->zInterStore('list-list2', ['list', 'list2'], [1, 1], 'MIN');
//并集
//$ok=$redis->zUnionStore('aaa', ['list', 'list2'], [1, 1], 'MIN');
//var_dump($ok);exit;

//$ok=$redis->zRemRangeByScore('list', -3, 0);//删除 分数范围内的成员
//$ok=$redis->zRemRangeByRank('list', 0, 1);//下标参数start和stop都以0为底,0处是分数最小的那个元素。这些索引也可是负数,表示位移从最高分处开始数。例如,-1是分数最高的元素,-2是分数第二高的,依次类推。
//var_dump($ok);exit;
var_dump($list);

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验