关闭

ASP.NET怎么样缓存频繁更新的数据?

发表于:2009-6-23 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

  最近接手一个公司的论坛。主题数量大概有100W,回复数有900W,在线人数3000左右。之前设计论坛的GG采用静态集合来缓存每个版块的主题列表。但论坛偶尔会冒出个缓存的bug,其中解决了些问题,但时不时又会有新的bug。ms有点“野火烧不尽春风吹又生”的感觉...

  所以我也想着手改善一下,想了想决定重写个原型出来,暂放cnblogs希望大虾们能指点一下迷津。

  我之前的想法是论坛启动时往Memcached服务器填上大量数据,然后Web服务器直接找Cache服务器增、删、改、查 操作。再调个Task跑作业来更新数据库。但因为种种原因再加种种其它原因。所以没有用上Memcached。所以只能凑合利用上Web服务器的内存来改善一下数据库的紧张请求。

  现在没有Cache服务器,就用Web服务器的内存吧。目前大体思路是这样:

  1、论坛初始化,获取所有版块ID,循环为每个版块装载一定数量的主题到静态的DictionaryList里(这个DL集合是我要实现的东西)。

  2、实现一个线程池,线程池定义了一些参数,能定时定量的更新数据库。

  3、当用户发布一个新主题时,将新的主题Id和内容插入到静态DL集合的顶部,同时删除DL集合的尾部结点。同时将该主题实体插入线程池。

  4、DL集合需要实现功能如下:

  (1)获取分页列表

  (2)根据主题ID获取主题实体。(如果静态缓存找不到则从数据库里找)

  (3)发布一个新主题时,该主题能插入到DL集合顶端。(论坛贴子都是顶上去的)

  (4)DL集合需要保持一定数量数据,以根据用户操作和实际情况来修改缓存主题数量。

  (5).....未知...

  DL集合实现:

  using System;

  using System.Collections.Generic;

  using System.Text;

  namespace Phantaci.Test

  {

  ///

  /// 原因:

  /// List集合有根据索引查找的功能,但不支持 key,Value 形式的集合。

  /// Dictionary支持这种集合,但又不支持索引查找.所以两者关联起来一起用。

  ///

  /// 需求:

  /// 我需要一个集合类,即能根据集合的索引段来获取实体列表,同时又要根据某个实体ID来获取这个实体。

  /// 当我往集合里插入、更新、编辑实体时,当前操作的实体需要置于集合的顶部,同时为了保持实体总数(EntityDictionary.Count),需去除尾部实体。

  ///

  /// 应用:

  /// 论坛版块列表缓存。当用户进入某版块时,则从DictionaryList获取一个分页列表。

  当“发表主题”时则把新主题置于DictionaryList顶部。

  /// 同时删除尾部最后一个节,以保持最新的固定的实体数量。主要作用是缓存版块前几十页频繁更新的列表。

  ///

  ///

  public class DictionaryList<T>

  {

  ///

  /// 用于存放所有实体列表集合类 TopicId,Entity

  ///

  private Dictionary<int, T> _entityDictionary = new Dictionary<int, T>();

  //private Object _objLock = new Object();

  ///

  /// 索引主题集合类 用于存放TopicId 与 _entityDictionary关联

  ///

  private List<int> _indexList = new List<int

 

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号