后台获取ip定位,高并发问题
贴上代码,查询了IP之后放到缓存里面。
///
/// 本地缓存库
///
private static Dictionary addressCache = new Dictionary();
public static CityInfo GetAddress(string ip)
{
if (!regex.IsMatch(ip) || ip == NO_IP) return ip ?? string.Empty;
if (addressCache.ContainsKey(ip)) return addressCache[ip];
lock (addressCache)
{
if (!File.Exists(IPDATA_PATH)) return new CityInfo(); ;
City db = new City(IPDATA_PATH);
CityInfo info = db.findInfo(ip, 'CN');
if (!addressCache.ContainsKey(ip)) addressCache.Add(ip, info);
return info;
}
}
另外,IP库如果只是要精确到城市,可以不用数据库,很多第三方的IP库文件数据库可以进行查询,把IP库加载进入内存(仅十几M而已),会减少很多不必要的IO开销。
赞0
踩0