写一个程序结合laravel和redis统计访问链接时不同User-Agent的访问次数和访问用户数
时间: 2024-02-11 07:06:56 浏览: 59
好的,下面是一个简单的示例程序:
首先,安装 Redis 扩展:
```
composer require predis/predis
```
然后,在 Laravel 中配置 Redis:
在 `.env` 文件中添加以下配置:
```
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
```
然后,在 `config/database.php` 文件中添加以下配置:
```
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
```
接下来,创建一个中间件来统计访问链接时不同 User-Agent 的访问次数和访问用户数:
```
php artisan make:middleware TrackUserAgent
```
在 `app/Http/Middleware/TrackUserAgent.php` 文件中编写代码:
```php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Redis;
class TrackUserAgent
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// 获取 User-Agent
$userAgent = $request->header('User-Agent');
// 统计访问次数
$count = Redis::hincrby('user_agents_counts', $userAgent, 1);
// 统计访问用户数
$ip = $request->ip();
Redis::sadd('user_agents_ips:' . $userAgent, $ip);
return $next($request);
}
}
```
代码分析:
- 在中间件的 `handle` 方法中,首先获取请求的 User-Agent,然后使用 Redis 的 `hincrby` 方法来自增 User-Agent 对应的次数。
- 然后,使用 Redis 的 `sadd` 方法来添加当前访问 IP 到 User-Agent 对应的集合中。这样,就可以统计访问用户数了。
接下来,在 `app/Http/Kernel.php` 文件中注册中间件:
```php
protected $routeMiddleware = [
// ...
'track_user_agent' => \App\Http\Middleware\TrackUserAgent::class,
];
```
最后,在需要统计的路由中使用中间件:
```php
Route::get('/test', function () {
return 'Hello, world!';
})->middleware('track_user_agent');
```
这样,每次访问 `/test` 路由时,都会统计访问次数和访问用户数。可以使用 Redis 的命令来查看统计结果,例如:
```
$ redis-cli
127.0.0.1:6379> hgetall user_agents_counts
1) "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
2) "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1"
127.0.0.1:6379> scard user_agents_ips:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
(integer) 1
127.0.0.1:6379> scard user_agents_ips:"Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1"
(integer) 1
```
这里查看了两个 User-Agent 的统计结果,可以看到访问次数都是 1,访问用户数也都是 1。
阅读全文