Py学习  »  Redis

有没有办法在Redis中执行数学计算,以获得一些经过处理的数据,而不是循环获得的值?

rajesh • 3 年前 • 1546 次点击  

我有一个数组,包含成员名称和使用geosearch with distance返回的距离。

0 => 
  array (
    0 => '2819483906',
    1 => '19.8286',
  ),
  1 => 
  array (
    0 => '2819912246',
    1 => '19.6780',
  )

我还有一些与成员名相关的数据,其中包含存储在 hsets 我用 hgetall 命令循环遍历该值,并根据获得的结果进行一些计算。

HSETS循环后关联成员的值:

array (
  0 => 
  array (
    'id' => '2819483906',
    'cc' => '2',
    'lon' => '-84.76913364167706',
    'lat' => '39.90915161402598',
  ),
  1 => 
  array (
    'id' => '2819912246',
    'cc' => '1',
    'lon' => '-84.76144614926717',
    'lat' => '39.90891054290965',
  ),
) 

代码如下:

$geoPoints= $redis->executeRaw(["GEOSEARCH" ,$tableName , $type ,$lon ,$lat ,"BYRADIUS" ,$radius, $metric, "WITHDIST"]);

        $weightedSum = 0;

        for($i=0;$i<count($geoPoints);$i++){
            if($redis->hgetall($geoPoints[$i])!=NULL){
                $objArray = (object)$redis->hgetall($geoPoints[$i]);
                $cc = (float)$objArray->cc;
                $weightedSum += ($cc * ($radius - ($geoPoints[$i][1]/$radius)));
            }
        }

由于循环,当地质点阵列较大时,此过程非常耗时。在这里,我必须循环通过从Georgadius函数获得的所有点,并获得其相关的cc值,并将其用于计算。


(这些过程可以在PostgreSQL中完成,同时选择查询本身)。 是否有类似的方法或更好的方法,以便我可以防止循环,并以更快的方式获得结果。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132793
文章 [ 1 ]  |  最新文章 3 年前