Redis绘出访客的地图(redis 访客地图)
图片
Redis作为一种快速的键值数据库,在网站中应用广泛,不论是缓存还是统计,都非常好用。本文将介绍如何使用Redis实现对网站访客的地图绘制功能,以及通过PHP代码实现此功能。
在服务器安装Redis,如果你的服务器已经安装了,可以跳过此步骤。Redis主要用于存储访客的IP地址,因此打开Redis的配置文件,将maxmemory设置为存储所需的内存数量(一般设置为256MB),因为IP地址不会变化,所以可以设置maxmemory-policy为allkeys-lru。
接下来,需要在网页上添加一段JS代码,以便获取访客的IP地址:
$(function(){
$.get(‘http://ip-api.com/json/?fields=status,message,continent,country,regionName,city,zip,lat,lon,timezone,isp’,function(ipInfo){
if(‘success’ === data.status){
/*setting redis*/
var info = {
“continent”: data.continent,
“country”: data.country,
“regionName”: data.regionName,
“city”: data.city,
“zip”: data.zip,
“lat”: data.lat,
“lon”: data.lon,
“timezone”: data.timeZone,
“isp”: data.isp
}
//发送请求给Redis,将访客IP地址以及对应的地理信息写入Redis
$.post(‘/php/saveGeoInfo.php’,info,function(res){
});
}
});
});
接下来我们就可以写PHP处理Redis访客数据的代码了,PHP代码使用了Predis组件,我们可以通过以下代码将Redis中的数据收集起来:
use Predis\Client;
$client = new Client([
‘scheme’ = ‘tcp’
‘host’ = ”
‘port’ = 6379
]);
//获取Redis中IP地址和地理位置信息
$geoInfo = $client->hgetall(‘geo_info’);
$data = array();
//循环处理获取的数据,将访客的位置存入数组
foreach($geoInfo as $key => $value){
$geoData = json_decode($value);
$data[$geoData->lat][$geoData->lon][] = $geoData;
}
header(‘Content-Type: application/json’);
echo json_encode($data);
//输出JSON数据,可以使用百度地图API将获取的数据绘制成图片
?>
可以使用百度地图API来绘制访客位置图,网上有很多开源API可以使用,这里我们以百度地图为例:
$( function () {
// 使用JQuery从服务器获取访客的位置
$.get( ‘/php/geoJson.php’, function ( geojson ) {
//获取到的JSON数据,转换成GeoJson格式的数据:
var geoDataSet = {“type”: “FeatureCollection”,”features”: [] };
$.each( geojson, function ( lat, lon ) {
$.each( lon, function ( key, value ) {
geoDataSet.features.push({
“type”:”Feature”,
“properties”:{“name”:value[0].country+value[0].regionName+value[0].city},
“geometry”:{
“type”:”Point”,
“coordinates”:[value[0].lon,value[0].lat]
}
});
});
});
var map = new BMap.Map(“contner”);
map.centerAndZoom(new BMap.Point(104.067, 30.633), 5);
//创建LBS搜索实例
var localSearch = new BMap.LocalSearch(map);
//向地图添加LBS实例
var lbsLayer = new BMap.GeoJSON(geoDataSet);
lbsLayer.addTo(map);
//添加比例尺控件
var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_TOP_LEFT});
var top_left_navigation = new BMap.NavigationControl();
});
});
通过以上代码,我们就能在网页上成功的绘出服务器上的访客位置地图图片。
使用Redis储存用户的IP地址,再配合JS和PHP,结合百度地图API,就可以很轻易地实现绘制网站访客地图图片的功能。