我要缓存URL数组 怎么实现不循环读取数组...要求是有时候需要返回当前url所在键位置 有时需要根据键位置返回当前URL 但数组是动态添加的 当存在值为URL时则不增加到数组 否则在数组后增加当前URL比如URL为 $url = 'http://www.baidu.com';我现在实现的是 $md5 = md5($url);数组为: $data = array($md5=>$url);要求返回url所在位置 现在应该返回0 因为他在键0处  url很多的时候 需要循环获取 效率肯定很低  请问有撒方法没?..

解决方案 »

  1.   

    你这种应用场景 memcache比较适合你.
    php对数组的支持是非常强大的,就网站的当前url 来说 小菜一碟,你的url有多少?如果多到不能再多那么可以考虑用数据库来处理。
      

  2.   


    我目前是用的数据库分表缓存 但是感觉还是慢了  memcache我会结合到用  URL的话没法估计 因为PHP数组比较高效 我测试了1000W数组就1秒多就执行完了 所以考虑 分文件+PHP数组+memcache 目前我用了两个数组来代替
    分别是  类似如下:
    $url = 'http://www.baidu.com/';
    $md5_url = md5($url);
    $url1 = array($md5_url=>$url);
    $url2 = array(2=>$md5_url);
    两个数组同步增加  当传入url 返回ID时  先查找url2数组 返回当前键 但根据ID返回URL时  现在查找url中的md5_url 然后再查找url1中等于md5的url但现在还有一个疑问 查找url2中url 的键 有什么方法不循环 返回当前键位置???
      

  3.   

    可以用array_search函数 但之前用了 感觉不可靠 这函数 经常查找失败~~
      

  4.   

    搜索引擎? 
    URL的话没法估计,那还用考虑嘛,上数据库吧。
      

  5.   


    是啊 也没时间去测试 是什么原因导致失败 url中有可能编码不一致吧
      

  6.   

    是我看不懂还是怎样 不就两个函数 in_array(); array_search();
      

  7.   

    如果你非要这么搞建议你想办法分组处理,,,例如对md5值,的前面两位,作为一个分组那么1000W的数组,平均理想值,规模降至4W。。
    这种规模数据,内存、并发……才是瓶颈,,,我猜有可能要做后台进程,尽管非php擅长的地方