1.应用场景

主要用于学习Redis 有序集合【SortedSet】类型,实现排行榜功能

2.学习/操作

1.文档阅读

https://laravelacademy.org/post/22169 // 基于 Redis 有序集合实现 Laravel 热门浏览文章排行榜功能

 // 2021-03-23 - 高性能 Redis 实战


2.整理输出

代码实现:

GitHub:https://github.com/ningxiaofa/high-performance-redis-tutorial/releases/tag/v0.0.2

Gitee:https://github.com/ningxiaofa/high-performance-redis-tutorial/releases/tag/v0.0.2

2.1 准备模型类和数据表

1. 执行 php artisan migrate

Note:

这里使用的 redis_demo

同时 .env 文件要暂时先用root用户,sail用户不具有写入权限,否则,执行 sail php artisan migrate 会出现报错

redis小时排行榜 redis文章热度排行榜_redis小时排行榜

redis小时排行榜 redis文章热度排行榜_Redis_02


2. 成功生成数据表

redis小时排行榜 redis文章热度排行榜_redis小时排行榜_03


2. 2 热门浏览文章排行榜功能实现

步骤:

1 维护基于文章浏览数的有序集合

2 读取有序集合元素生成排行榜

2.3 测试热门浏览文章排行榜

1 生成模型工厂生成数据和生成模拟请求文件

sail php artisan make:factory PostFactory

sail php artisan make:command MockViewPosts

redis小时排行榜 redis文章热度排行榜_排行榜_04


2 执行模拟访问

使用了 Laravel 自带的 HTTP 客户端发起对 /posts/{post} 路由的模拟访问

sail php artisan mock:view-posts

出现如下场景,一直执行了几分钟, 还没有停下来, 通过大概看了输出内容,似乎出了问题,于是终止该进程

redis小时排行榜 redis文章热度排行榜_redis小时排行榜_05

通过查看过程,代码,判断应是URL的问题,这里sail并没有配置虚拟主机域名,使用的是localhost,于是将 http://redis-demo.test/posts/  换成 http://localhost/posts/再次执行上述命令

redis小时排行榜 redis文章热度排行榜_Redis_06


此时,又出现报错 SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known (SQL: truncate table `posts`)

redis小时排行榜 redis文章热度排行榜_bug_07

分析报错提示,应该是没找到mysql服务名

重新执行迁移回退和再次迁移

sail php artisan migrate:rollback

sail php artisan migrate

再次执行 

sail php artisan mock:view-posts

同样出现最初的报错,重现检查整个过程,究竟哪里出了问题,最后发现, 是路由文件, 没有引入PostController

redis小时排行榜 redis文章热度排行榜_排行榜_08

再次执行

此时,开始正确输出 【输出的内容正是PostController控制器中show 方法return的内容】

redis小时排行榜 redis文章热度排行榜_bug_09

查看数据库Posts数据表的内容和redis的数据

redis小时排行榜 redis文章热度排行榜_Redis_10

Redis // 同时可以看到,上节课的全站访问 PV的数据也在变化

redis小时排行榜 redis文章热度排行榜_redis小时排行榜_11


整个过程大概需要几分钟,请耐心等待


3 浏览器中访问获取热门文章排行榜数据

http://localhost/posts/popular

又出现幺蛾子了, 居然提示404

redis小时排行榜 redis文章热度排行榜_sailer_12

检查了遍路由,路由没发现问题

redis小时排行榜 redis文章热度排行榜_sailer_13

但是就是不行, 如果将 /posts/popular 改为 /posts-popular 

或者 将show 换成 popular 都可以正常访问

redis小时排行榜 redis文章热度排行榜_bug_14

如下访问结果

http://localhost/posts-popular

redis小时排行榜 redis文章热度排行榜_sailer_15

http://localhost/posts/1

redis小时排行榜 redis文章热度排行榜_bug_16


改回后,依然不行, 初步定位是 /posts/popular 路由存在问题,而且应该有路匹配的问题,没办法正常解析到popular方法中, 但是基于Laradock环境是没有问题的,所以应该是docker sailer 存在bug~, 接下来就是查看一下问题,提一个issue,当然能解决是最好的~

具体原因:TBD

解决办法:TBD




后续补充

...

3.问题/补充

TBD