我应该如何创建一个"应该存储在Redis缓存中#34;抽象?

时间:2016-08-05 13:30:31

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

这是Pluralsight Azure scalability class.

的代码段

我想为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();
    }

1 个答案:

答案 0 :(得分:0)

来自DZone article

的引用
  

当需要为规则,验证和选择标准建模时,请使用规范模式。

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