飞嗨,欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。(本博已于2015.12.6升级到php7,运行环境php7 php-fpm + nginx1.8.0)

php使用redis做热搜词排行榜

PHP lf 2417℃ 0评论

最近,b2c商城项目中,要做热搜词排行榜,用sql数据库做:建立一张表,保存用户的搜索记录,然后count每一个搜索词,并按照count的次数降序排列。这样的话,对数据库的I/O太频繁了,而且在count的时候扫描全表,如果表够大的话,查询速度会很慢。所以,考虑使用redis做热搜词记录。于是,拿自己的博客试验一下,记录本博客的搜索记录。

function redis_search_record($keyword){
$redis = new Redis();
$redis->connect(‘localhost’,6379);
$redis->auth(‘******’);
$redis->select(1);
$redis->zIncrBy(“blog:search” , 1 ,$keyword);
$redis->hMset(“blog:search_history:”.uniqid() , array( ‘time’=>time(),’ip’=>$_SERVER[‘REMOTE_ADDR’] ));
}

zset,有序集合,是一个没有重复元素的字符串集合,有序集合比set(集合)多了一个sore,有序集合的成员是唯一的,但是score是可以重复的。zIncrBy,向有序集合中添加一个成员,若不存在此成员,则增加此成员,并给出默认的score,若已存在此成员,则只会在score上增加指定的值。ZincrBy(‘blog:search’,1,$keyword),若在blog:search中还没有人搜索过$keyword,则创建一个$keyword成员,若已经有人搜索过$keyword了,则会在$keyword的score中+1,这样,按照score大小排列,就可以取出热搜词了zRange(‘blog:search’ , 0 , -1 , ‘withscores’);

blog:search

zrange

zrange

set,集合,hMset,一次可以插入多个成员,blog:search_history记住热搜词记录

search_history

search_history

转载请注明:飞嗨 » php使用redis做热搜词排行榜

喜欢 (5)or分享 (0)
发表我的评论
取消评论
表情
粤ICP备15018643号-1