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); }
/** * 获取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; }