【问题标题】:How should I create a "should store in Redis cache" abstraction?我应该如何创建一个“应该存储在 Redis 缓存中”的抽象?
【发布时间】:2016-12-11 22:44:54
【问题描述】:

这是来自Pluralsight Azure scalability class.的代码sn-p

我想为 Redis 缓存中应该(和不应该)存储的内容定义一个策略。缓存策略的一些抽象示例是

  • 约会之后
  • 日期 X 和 Y 之间
  • 门票人气
  • 机器学习 ...

我应该采取什么方法来清晰地定义可以在全球范围内实施并定期更新的政策?

CloudContext.cs

    public async Task<List<Event>> GetLiveEvents(DateTime currentDate)
    {
        string year = currentDate.Year.ToString();
        var key = GenerateLiveEventsKey(year); 

        var yearEvents = await cache.GetFromCacheAsync<List<Event>>(key, async () =>
        {
            List<Event> events = new List<Event>();
            string partitionKey = year;

            TableQuery<EventRead> query = new TableQuery<EventRead>().Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey));
            var result = tableEvents.ExecuteQuery(query);

            foreach (EventRead nosqlEvent in result)
            {
                var eventObj = nosqlEvent.ToEvent(false);
                events.Add(eventObj);
            }
            return events;
        });
        return yearEvents.Where(e => e.EventDate >= currentDate).ToList();
    }

【问题讨论】:

    标签: azure caching architecture redis domain-driven-design


    【解决方案1】:

    引用DZone article:

    当需要对规则、验证和选择标准进行建模时,使用规范模式。

    您的要求似乎就是这种情况,因此请查看Martin Fowler's paper 上的Specification 模式。当你将它与Composite 模式结合起来创建一个流畅的 API 来描述各种规则时,它真的变得很强大。

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 2023-03-08
      • 2020-03-02
      • 2012-02-22
      • 2017-12-07
      相关资源
      最近更新 更多