请教问题 当访问量大的时候数据不准确的问题

bccu 2013-07-04 05:05:11
有一个方法,根据IP获取城市信息,然后根据不同的城市信息做不同的处理
现在是单独测试这个方法没有问题,但是访问量大了就不准确了
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bccu 2013-07-05
  • 打赏
  • 举报
回复
引用 1 楼 qingfeng_wu 的回复:
请把方法贴出来!

//调用方法根据Aid和客户端IP的信息来判断
        string aid = "5";
        IpLimitBiz biz = new IpLimitBiz();
        if (biz.IsPopByIP(aid))
        {
            //显示
        }
        else
        {
           //不显示
        }
        //IpLimitBiz类的方法 判断是否显示
        public bool IsPopByIP(string aid)
        {
            bool isPop = true;
            Entity.IpLimit limit = ACache.GetLimitaidInfo(aid);
            if (limit != null)
            {
                string ip = IPAccess.GetClientIP().Split(',')[0];
                string ipnum = IPAccess.IPtoNum(ip).ToString();
                DataTable dt = ACache.GetIPInfo(ipnum);
                if (dt.Rows.Count > 0)
                {
                    string province = dt.Rows[0]["province"].ToString();
                    string[] provinces = limit.Province.Replace(",", ",").Split(',');
                    for (int i = 0; i < provinces.Length; i++)
                    {
                        if (province.IndexOf(provinces[i]) == -1)
                        {
                            isPop = false;
                        }
                        else
                        {
                            isPop = true;
                            break;
                        }
                    }
                }
            }
            return isPop;
        }
        //ACache类的方法在IsPopByIP中调用 
        public static Entity.IpLimit GetLimitaidInfo(string aid)
        {
            Entity.IpLimit limit = null;
            string key = "IpLimitList";
            DataTable dt = (DataTable)HttpContext.Current.Cache.Get(key);
            if (dt == null)
            {            
                string sql = "select * from IpLimit";
                dt = SqlHelper.ExecuteDataset(SqlHelper.DBCONN, CommandType.Text, sql).Tables[0];                
                HttpContext.Current.Cache.Insert(key, dt.Copy(), null, DateTime.Now.AddMinutes(10.0), TimeSpan.Zero);
            }
            if (dt.Rows.Count > 0)
            {
                DataRow[] dr = dt.Select("aid='" + aid + "'");
                if (dr.Length > 0)
                {
                    limit = new Entity.IpLimit();
                    limit.ID = int.Parse(dr[0]["id"].ToString());
                    limit.aid = int.Parse(dr[0]["aid"].ToString());
                    limit.Province = dr[0]["Province"].ToString();
                }
            }
            return limit;
        }
        //ACache类的方法在IsPopByIP中调用 
         public static DataTable GetIPInfo(string ipnum)
        {
            string sql = "select  *  from  dbo.IpSource where  ipnum1<=" + ipnum + " and ipnum2>=" + ipnum;
            DataTable dt =  SqlHelper.ExecuteDataset(SqlHelper.DBCONNLOG, CommandType.Text, sql).Tables[0];
            return dt;
        }
        //IPAccess类的方法在IsPopByIP中调用 获取客户端IP
        public static string GetClientIP()
        {
            string ipString = "";
            if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
            {
                ipString = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
            }
            else
            {
                ipString = HttpContext.Current.Request.UserHostAddress;
            }
            return ipString;
        }
        
        //IPAccess类的方法在IsPopByIP中调用  将IP 地址转化为数字
        public static long IPtoNum(string Ip)
        {
            string[] stringip = new string[4];
            stringip = Ip.Split('.');
            long ipnum = Convert.ToInt64((stringip[0])) * 16777216 + Convert.ToInt64(stringip[1]) * 65536 + Convert.ToInt64(stringip[2]) * 256 + Convert.ToInt64(stringip[3]);
            return ipnum;
        }
上面是代码,帮忙分析一下,多谢
myhope88 2013-07-05
  • 打赏
  • 举报
回复
应该是代码逻辑问题吧
phoebuswei 2013-07-04
  • 打赏
  • 举报
回复
吧数据加上线锁,应该是并把问题 我猜
  • 打赏
  • 举报
回复
引用
当访问量大的时候数据不准确的问题
支付宝每年多少交易?不准确的话,阿里巴巴关门了吧
零点逸族 2013-07-04
  • 打赏
  • 举报
回复
不存在访问量大了就不准确了,就算存在也是你代码出了问题,而数据量大只是一个表象而已
饕餮123 2013-07-04
  • 打赏
  • 举报
回复
给点代码好分析啊
吴青峰 2013-07-04
  • 打赏
  • 举报
回复
请把方法贴出来!

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧