【问题标题】:Caching design patterns for Web ApplicationWeb 应用程序的缓存设计模式
【发布时间】:2011-12-12 13:59:07
【问题描述】:

我们将 memcache 用于 ASP.NET MVC3 应用程序。

我想知道人们用来管理数据的推荐设计模式或库,因为会生成很多键,因此管理并找出哪些数据变脏以及如何处理可能并不痛苦刷新数据,以便我们在缓存中有一个干净的数据副本,并且我们的数据完整性在那里,我们不会进入脏缓存。

谢谢 萨尔塔克

【问题讨论】:

  • 缓存中有多少数据?缓存的平均大小是多少?多少个读/写事务?
  • 我不完全知道,但它肯定会触及几个 100MB。我们尚未实现缓存,但我们希望通过遵循行业推荐的做法来实现。我们只是做了一个小实现来掌握 Memcache。在此找到一篇不错的文章 - alachisoft.com/resources/articles/… 同样,想知道是否有其他模式或实践被遵循。谢谢

标签: .net asp.net-mvc-3 design-patterns caching memcached


【解决方案1】:

【讨论】:

  • 感谢分享 0lukasz0 但这不是我想要的。
【解决方案2】:

我不知道我是否真的明白你的问题,但这是我用来管理 memcached 访问和密钥的方式 首先我想说这可能不是最好的方法,因为我是缓存新手

public class City { String name; }

public interface CityRepository
{
    City GetCityById(Int32 id);
}

public class SqlCityRepository : CityRepository
{
    public City GetCityById(Int32 id)
    {
        //SQL CODE

        return null;
    }
}

public class MemcachedRepository : CityRepository
{
    public CityRepository repository { get; set; }

    public MemcachedRepository(CityRepository repository)
    {
        this.repository = repository;
    }

    public City GetCityById(Int32 id)
    {
        //IF(CHECK_IF_KEY_IS_PRESENT_AT_MEMCACHED)
        //  RETURN CACHED_VALUE(KEY);
        //ELSE
            var result = this.repository.GetCityById(id);
            //ADD result TO CACHED ITEMS
            return result;
    }
}

这就是我生成密钥的方式

CLASSNAME + METHODNAME + PARAMS

这样我最终会缓存方法结果

【讨论】:

  • 在这些之上你应该实现一个缓存过期策略,如果缓存中的项目比日期时间差(间隔)更旧,你可以使用 datetime 作为缓存过期。转到数据库并将其放在缓存中。从缓存中获取。
  • 你说得对!如果你想对你的缓存过期策略进行单元测试,你可以实现 AmbientContext 模式而不是严格使用 DateTime 实现!!!它适用于我的硬件应用程序..!
  • Renota,您的答案符合我正在寻找的解决方案。但这仍然是一个相当基本的实现。看看这篇文章 - alachisoft.com/resources/articles/… 这家伙提出了一种更好的做事方式。因此,我正在寻找一种可能已被广泛使用的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 2022-08-20
  • 2010-09-24
相关资源
最近更新 更多