熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP.NET怎麼樣緩存頻繁更新的數據?

2022-06-13   來源: .NET編程 

  最近接手一個公司的論壇主題數量大概有W回復數有W在線人數左右之前設計論壇的GG采用靜態集合來緩存每個版塊的主題列表但論壇偶爾會冒出個緩存的bug其中解決了些問題但時不時又會有新的bugms有點野火燒不盡春風吹又生的感覺
所以我也想著手改善一下想了想決定重寫個原型出來暫放cnblogs希望大蝦們能指點一下迷津

  我之前的想法是論壇啟動時往Memcached服務器填上大量數據然後Web服務器直接找Cache服務器增查 操作再調個Task跑作業來更新數據庫但因為種種原因再加種種其它原因所以沒有用上Memcached所以只能湊合利用上Web服務器的內存來改善一下數據庫的緊張請求
現在沒有Cache服務器就用Web服務器的內存吧目前大體思路是這樣:

  []論壇初始化獲取所有版塊ID循環為每個版塊裝載一定數量的主題到靜態的DictionaryList裡(這個DL集合是我要實現的東西)
[]實現一個線程池線程池定義了一些參數能定時定量的更新數據庫
[]當用戶發布一個新主題時將新的主題Id和內容插入到靜態DL集合的頂部同時刪除DL集合的尾部結點同時將該主題實體插入線程池
[]DL集合需要實現功能如下
   獲取分頁列表
   根據主題ID獲取主題實體(如果靜態緩存找不到則從數據庫裡找)
   發布一個新主題時該主題能插入到DL集合頂端(論壇貼子都是頂上去的)
   DL集合需要保持一定數量數據以根據用戶操作和實際情況來修改緩存主題數量
   未知

  DL集合實現
using System;
using SystemCollectionsGeneric;
using SystemText;

  namespace PhantaciTest
{
    ///
    /// 原因:
    /// List集合有根據索引查找的功能但不支持 keyValue 形式的集合
    /// Dictionary支持這種集合但又不支持索引查找所以兩者關聯起來一起用
    ///
    /// 需求:
    /// 我需要一個集合類即能根據集合的索引段來獲取實體列表同時又要根據某個實體ID來獲取這個實體
    /// 當我往集合裡插入更新編輯實體時當前操作的實體需要置於集合的頂部同時為了保持實體總數(EntityDictionaryCount)需去除尾部實體
    ///
    /// 應用:
    /// 論壇版塊列表緩存當用戶進入某版塊時則從DictionaryList獲取一個分頁列表

  當發表主題時則把新主題置於DictionaryList頂部
    /// 同時刪除尾部最後一個節以保持最新的固定的實體數量主要作用是緩存版塊前幾十頁頻繁更新的列表
    ///
    ///
    public class DictionaryList<T>
    {
        ///
        /// 用於存放所有實體列表集合類 TopicIdEntity
        ///
        private Dictionary<int T> _entityDictionary = new Dictionary<int T>();
        //private Object _objLock = new Object();

  ///
        /// 索引主題集合類 用於存放TopicId 與 _entityDictionary關聯
        ///
        private List<int> _indexList = new List<int


From:http://tw.wingwit.com/Article/program/net/201311/13673.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.