web-dev-qa-db-ja.com

ServiceStack Webサービスでのキャッシュの仕組み

私はキャッシングに不慣れで、キャッシングが一般的にどのように機能するかを理解しようとしています。以下は、ServiceStack Webサイトのコードスニペットです。

public object Get(CachedCustomers request)
{
    //Manually create the Unified Resource Name "urn:customers".
    return base.RequestContext.ToOptimizedResultUsingCache(base.Cache, "urn:customers", () =>
    {
         //Resolve the service in order to get the customers.
         using (var service = this.ResolveService<CustomersService>())
                return service.Get(new Customers());
     });
}

public object Get(CachedCustomerDetails request)
{
    //Create the Unified Resource Name "urn:customerdetails:{id}".
    var cacheKey = UrnId.Create<CustomerDetails>(request.Id);
    return base.RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey, () =>
    {
        using (var service = this.ResolveService<CustomerDetailsService>())
        {
             return service.Get(new CustomerDetails { Id = request.Id });
        }
    });
}

私の疑問:

  1. 私は、キャッシュされたデータが同じ/分散されたサーバーRAMに格納されることを読みました。したがって、最初の方法で、顧客数が100万を超える場合に処理できるデータ量は、メモリを過度に占有しないと仮定します。

  2. 一般的に、GET操作にのみキャッシュを適用し、UPDATEが行われた場合は無効にしますか?.

  3. キャッシュのメモリ消費をチェックするためのツールを提案してください。

7
Sunny

ServiceStackのキャッシングに関するWikiページ をお読みください。

使用されるメモリは、使用されるキャッシュプロバイダーによって完全に決定されます。 RedisやMemcachedなどの分散キャッシュを使用する場合、そのデーモン/サービスのプロセスのメモリは、キャッシュされたデータを保持するために増加します。 ServiceStackのMemoryCachedClient(デフォルト)を使用する場合、キャッシュはメモリ内、つまりASP.NET w3wp.exeプロセス内に保持されます。

キャッシュの大きさは、キャッシュされる内容に直接影響されます。

選択するキャッシング戦略は、キャッシングプロバイダーに依存しません。提供される例では、フェッチ時にキャッシュを遅延して作成し、変更するとキャッシュを無効にするキャッシングパターンを使用しています。

6
mythz