开发者社区> 问答> 正文

后台获取ip定位,高并发问题

后台需要获取访问者的ip,然后通过ip进行定位,这时候由于并发很高,并且ip库的数据大概有几百万条导致数据库查询超时而影响整个系统,有没有什么好的办法呢?

展开
收起
1600822322090058 2019-05-18 19:00:42 2278 0
2 条回答
写回答
取消 提交回答
  • 贴上代码,查询了IP之后放到缓存里面。

     /// <summary>
            /// 本地缓存库
            /// </summary>
            private static Dictionary<string, CityInfo> addressCache = new Dictionary<string, CityInfo>();
            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开销。

    2020-01-08 10:19:11
    赞同 展开评论 打赏
  • 解决应用高并发的问题方法: 第一,确认服务器硬件是否足够支持当前的流量。 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,否则怎么优化都不可能彻底解决性能问题。 第二,优化数据库访问。 服务器的负载过大,一个重要的原因是CPU负荷过大,降低服务器CPU的负荷,才能够有效打破瓶颈。而使用静态页面可以使得CPU的负荷最小化。前台实现完全的静态化 当然最好,可以完全不用访问数据库,不过对于频繁更新的网站,静态化往往不能满足某些功能。 缓存技术 就是另一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用这些文件,而不必再访问数据库,WordPress和Z-Blog都大量使用这种缓存技术 。我自己也写过一个Z-Blog的计数器插件,也是基于这样的原理。 如果确实无法避免对数据库的访问,那么可以尝试优化数据库的查询SQL.避免使用Select *from这样的语句,每次查询只返回自己需要的结果,避免短时间内的大量SQL查询。 来源于网络,供您参考

    2019-10-10 15:59:21
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
徐雷-Java为王,互联网高并发架构设计与选型之路6.0 立即下载
Redis 的高并发实战:抢购系统 立即下载
MySQL高并发场景实战 立即下载