文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>缓存中数据交叉使用引起的问题

缓存中数据交叉使用引起的问题

时间:2010-12-13  来源:cai919

某次修改代码后测试时前端一直在加载状态,也没有异常抛出,第一反应是死循环.经过逐步调试发现问题:取交叉数据的地方出了问题,用户瓶子列表的时候要显示某个瓶子的最新动态,动态记录一样也对应一个缓存对象并且动态里面也需要显示产生该动态的瓶子名称.根据实际情况,现在的做法是将所需数据级联查询出来作为一个整体缓存,减轻缓存服务器负担和查询交叉数据时的死循环.

在调试的时候还发现另外一个问题:在并发查询某缓存外数据时,由于前面一次的过程尚未执行完成,数据还没有写入到缓存中,接下来再次请求相同的数据一样是从数据库实时查询的.加一个排它锁即可保证只从数据库中取一次.

 

     lock (lock_BottleInfo)
            {
                BottleInfo model = MCGenericHelper.getValueFromMC<BottleInfo>(ref MCGenericHelper.mc_forever, CacheKeyHelper.BottleKey.BOTTLE_INFO + bottleID);

                if (null == model || (null != model && model.StyleID == 2 && model.IsDrift == 0))
                {
                    DbCommand dbc = m_DbRead.GetStoredProcCommand("Bottle_SelectOne");
                    m_DbRead.AddInParameter(dbc, "@pBottleID", DbType.Int32, bottleID);

                    using (IDataReader reader = m_DbRead.ExecuteReader(dbc))
                    {
                        if (reader.Read())
                        {
  
                            //...

                            MCGenericHelper.MCStore<BottleInfo>(ref MCGenericHelper.mc_forever, ref model, CacheKeyHelper.BottleKey.BOTTLE_INFO + bottleID);
                        }
                    }
                }

                return model;
            }
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载