Browse Source

feat: redis cache support

master
dnomd343 3 years ago
parent
commit
771af28411
  1. 18
      backend/queryInfo.php
  2. 32
      backend/redis.php
  3. 39
      docs/setup.md

18
backend/queryInfo.php

@ -1,7 +1,8 @@
<?php
include("qrcode.php");
include("getInfo.php");
include('redis.php');
include('qrcode.php');
include('getInfo.php');
function getClientIP() { // 获取客户端IP
return isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
@ -137,7 +138,18 @@ function preRount() { // 解析请求路径
function getInfo($ip) { // 获取并格式化IP数据
global $request;
$info = getIPInfo($ip);
global $redisSetting;
if ($redisSetting['enable']) { // 启用Redis缓存
$info = getRedisData($ip); // 查询缓存数据
if ($info == NULL) { // 缓存未命中
$info = getIPInfo($ip); // 发起查询
setRedisData($ip, json_encode($info)); // 缓存数据
} else { // 缓存命中
$info = json_decode($info, true); // 使用缓存数据
}
} else { // 未启用Redis缓存
$info = getIPInfo($ip);
}
if ($request['cli']) { // 使用命令行模式
$cli = "IP: " . $info['ip'] . PHP_EOL;
if ($info['as'] != NULL) { $cli .= "AS: " . $info['as'] . PHP_EOL; }

32
backend/redis.php

@ -0,0 +1,32 @@
<?php
$redisSetting = array(
'enable' => true,
'host' => '127.0.0.1',
'port' => 6379,
'passwd' => '',
'prefix' => 'echoip-',
'cache_time' => 3600000
);
function getRedisData($ip) { // 查询Redis,不存在返回NULL
$redis = new Redis();
global $redisSetting;
$redis->connect($redisSetting['host'], $redisSetting['port']);
$redis->auth($redisSetting['passwd']);
$redisKey = $redisSetting['prefix'] . $ip;
$redisValue = $redis->exists($redisKey) ? $redis->get($redisKey) : NULL;
return $redisValue;
}
function setRedisData($ip, $data) { // 写入信息到Redis
$redis = new Redis();
global $redisSetting;
$redis->connect($redisSetting['host'], $redisSetting['port']);
$redis->auth($redisSetting['passwd']);
$redisKey = $redisSetting['prefix'] . $ip;
$redis->set($redisKey, $data); // 写入数据库
$redis->pexpire($redisKey, $redisSetting['cache_time']); // 设置过期时间
}
?>

39
docs/setup.md

@ -39,6 +39,25 @@ shell> systemctl | grep fpm
php7.3-fpm.service loaded active running The PHP 7.3 FastCGI Process Manager
```
确认Redis正常运行
```
shell> redis-cli --version
···Redis版本信息···
# 登录redis服务
shell> redis-cli
# 若服务主机非默认参数,使用以下命令登录
shell> redis-cli -h {hostname} -p {port}
# 若配置有密码则先认证
127.0.0.1:6379> auth {passwd}
# 登录后确认连接
127.0.0.1:6379> ping
PONG
```
### 3. qqwry.dat配置
获取并解密纯真IP数据库
@ -59,7 +78,25 @@ shell> cd /var/www/echoIP/backend/qqwryFormat
shell> ./start.sh
```
### 4. 配置Web服务
### 4. 配置Redis连接
Redis连接参数位于 `backend/redis.php` 文件中,默认如下
```
$redisSetting = array(
'enable' => true,
'host' => '127.0.0.1',
'port' => 6379,
'passwd' => '',
'prefix' => 'echoip-',
'cache_time' => 3600000
);
```
按当前服务器配置修改,`enable` 为false时可关闭缓存功能,无密码时将 `passwd` 留空即可,键值前缀与缓存时间(单位ms)按实际需要修改。
### 5. 配置Web服务
配置网页服务器代理,需要额外占用除80与443之外的一个端口,默认为TCP/1601,可按需修改。这里使用Nginx作为示例,其他Web服务原理类似。

Loading…
Cancel
Save