日常开发中搜索功能经常遇到热门搜索功能类似如图:

基本有几种实现方案:
1、mysql等常见关系型数据库
2、redis等非关系型数据库
3、文件缓存
mysql和文件缓存在这种操作(写入和读取)频繁的场景上并不是最优的选择,下面我们已redis举例。首先,在用户关键词搜索成功时,记录该关键词
$redis = new Redis(config('redis'));
$obj = $redis->getHandler();
$obj->zIncrBy("box:search" , 1 ,$keyword);Redis Zincrby 命令对有序集合中指定成员的分数加上增量 increment
可以通过传递一个负数值 increment ,让分数减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。当 key 不存在,或分数不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。当 key 不是有序集类型时,返回一个错误。分数值可以是整数值或双精度浮点数。
然后,通过Zrevrange读取数据排行数据
$obj->Zrevrange("box:search",0,10);Redis作为NoSQL中的一员,近年来得到广泛应用。与Memcached相比,Redis拥有更多的数据类型和操作接口,具有更大的适用范围,其中的有序集合(sorted set,也称为zset)就非常适合于排行榜的构建。
以此实践。


发表评论 取消回复