社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Redis

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

rajesh • 4 年前 • 1859 次点击  

我有一个数组,包含成员名称和使用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 ]  |  最新文章 4 年前