Exemplo n.º 1
0
 public static function createCacheRandWords(array $condition = array(), $expired = 24)
 {
     ini_set('memory_limit', '512M');
     $key = md5(json_encode($condition));
     $return_pagenum_list = array();
     $expired = $expired * 3600;
     //一天
     $pagenum_expired = 2 * $expired;
     //两天
     $file_cache = \Yii::$app->cache_data_file;
     $file_cache->cachePath = \Yii::getAlias('@frontend') . '/runtime/cache/rand_words';
     $cache_key_letter_pagenum = sprintf('%s|%s|%s|%s', 'rand_words', 'caches', 'randwords' . '_' . $key, 'pagenum');
     $cache_letter_pagenum_data = $file_cache->get($cache_key_letter_pagenum);
     if ($cache_letter_pagenum_data) {
         $return_pagenum_list = $cache_letter_pagenum_data;
     }
     //获取字母所对应的数据
     $letter_list = 'abcdefghijklmnopqrstuvwxyz';
     $len = strlen($letter_list);
     $return_list = array();
     $max_kw_length = 3000;
     // $size;
     for ($i = 0; $i < $len; $i++) {
         $wd = strtoupper($letter_list[$i]);
         $pagenum = isset($return_pagenum_list[$wd]) ? $return_pagenum_list[$wd] : 0;
         $pagenum = intval($pagenum) + 1;
         $tmp_offset = $pagenum * $max_kw_length;
         $return_info = Search::search_words_byinitial($wd, $tmp_offset, $max_kw_length, $condition);
         if (count($return_info['list']) == 0 && $pagenum > 0) {
             $return_info = Search::search_words_byinitial($wd, 0, $max_kw_length, $condition);
             $pagenum = 0;
         }
         $ret = $return_info['list'];
         $return_list[$wd] = $ret;
         $return_pagenum_list[$wd] = $pagenum;
     }
     //根据查询条件生成redis缓存的key前缀
     $redis_cache_key_prefix = self::buildKey($condition);
     self::createRandWordsForRedis($redis_cache_key_prefix, $return_list);
     $cache_key_letter_words = sprintf('%s|%s|%s|%s', 'rand_words', 'caches', 'randwords' . '_' . $key, 'words');
     $file_cache->set($cache_key_letter_words, $return_list, $expired);
     $file_cache->set($cache_key_letter_pagenum, $return_pagenum_list, $pagenum_expired);
     return $return_list;
 }
 private function getwordslist($wd, $offset, $size)
 {
     $filter_array = $this->getFilterArray();
     return Search::search_words_byinitial($wd, $offset, $size, $filter_array);
 }
Exemplo n.º 3
0
 /**
  * 获取26字母下的热词
  */
 public function letterRandWords()
 {
     $letters = range('A', 'Z');
     $offset = 0;
     $length = 28;
     $type = array(array('filter' => 'filter', 'args' => array('typeid', array(0, 2, 3, 4))));
     foreach ($letters as $k => $v) {
         $ret[$v] = Search::search_words_byinitial($v, $offset, $length, $type);
     }
     $result['letter'] = $letters;
     $result['words'] = $ret;
     return $result;
 }