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

1640163448(1).jpg

基本有几种实现方案:

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)就非常适合于排行榜的构建。

以此实践。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿
立即
联系

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部