社区所有版块导航
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 • 1 年前 • 399 次点击  

我有一个数组,包含成员名称和使用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
 
399 次点击  
文章 [ 1 ]  |  最新文章 1 年前
Lajos Arpad
Reply   •   1 楼
Lajos Arpad    2 年前

在我看来,你可能会结合起来 GEOSEARCH , GEOADD .如果你真的有很多优点,你也可以使用 Redis Cluster 为了纠正这种情况,你可以将你的数据划分为,比如说,地区。

一个简单的解决方案是将多个点存储在一起,关键是它们所在的地区或地区。所以,如果你能确定点的区域,那么你可以先搜索区域,然后搜索实际点。