您当前的位置: 首页 >  搜索

喜欢猪猪

暂无认证

  • 0浏览

    0关注

    228博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

热门搜索的并发处理,百万级并发的处理

喜欢猪猪 发布时间:2020-10-19 09:53:44 ,浏览量:0

前言:最近旅游的主页面处理搜索慢的情况,使用的机制是Redis的GetValue方式进行存储静态变量的方式,出现了Redis的timeout的情况;

解决方法以及思路:使用静态变量字典的方法进行处理

1.定义一个字典,主要是保存栏位比较少,类别、栏位、跳转地址等,一个key、一个实体类;

2.定义一个时间,每次更新字典的时候会保存一下,下次读取的时候会判断是否经过了十分钟,经过了十分钟之后,进行读取一次数据库进行更新字典;

3.进行双重锁的方式进行,避免出现锁穿透的情况

代码:

public static List GetAllTagInfo()         {             //System.Diagnostics.Debug.WriteLine("");             //缓存过期&&更新动作解放状态             if ((_campaignTagInfoData.RemoteData == null || _campaignTagInfoData.RemoteTime.AddMinutes(10) < DateTime.Now) && !CampaignRemoteData.SignRefresh)             {

                //System.Diagnostics.Debug.WriteLine("");                 bool taskCheckCreate = false;                 lock (CampaignRemoteData.LockTask)                 {                     if (!CampaignRemoteData.SignTask)                     {                         CampaignRemoteData.SignRefresh = true;//开始进入异步更新,关闭后续触发的更新通道,规避异步执行期间大量访问造成多线程创建                         CampaignRemoteData.SignTask = true;//锁住后续并发入坑                         taskCheckCreate = true;//判定当前请求是否需要生产第一个线程                     }                 }                 //System.Diagnostics.Debug.WriteLine("");                 if (taskCheckCreate)                 {                     try                     {                         Task.Factory.StartNew(() =>                         {                             try                             {                                 //System.Diagnostics.Debug.WriteLine("");                                 List result = null;                                 using (DbContext context = new DbContext(DBOperationType.Read, DbConnection.Db_TcTourismCampaign))                                 {                                     string strSql = $@" ";                                     result = context.SQLContext.ExecuteQueryModels(strSql, new Tc.Gl.Framework.ORM.Attrbuites.SqlNote("", "查询营销标签信息"));                                 }                                 lock (_campaignTagInfoData)                                 {                                     _campaignTagInfoData.RemoteData = result;                                     _campaignTagInfoData.RemoteTime = DateTime.Now;                                 }                             }                             catch (Exception ex)                             {                                 LogModel.LogRecord("CampaignRemoteDataService", "GetAllCampaignTagInfo", "", ex);                             }                             finally                             {                                 CampaignRemoteData.SignRefresh = false;//异步处理完成,解放下一次的更新动作                                 CampaignRemoteData.SignTask = false;//解锁第一个线程生产                             }                         });                     }                     catch (Exception ex)                     {                         LogModel.LogRecord("CampaignRemoteDataService", "GetAllCampaignTagInfo_1", "", ex);                         CampaignRemoteData.SignRefresh = false;//异步处理完成,解放下一次的更新动作                         CampaignRemoteData.SignTask = false;//解锁第一个线程生产                     }                 }             }             return _campaignTagInfoData.RemoteData ?? new List();         }

弊端:热门搜索的字典一定是一个比较少的数据库;最好的记录是在1000行以内;

关注
打赏
1648795721
查看更多评论
立即登录/注册

微信扫码登录

0.0362s