サーチ…


前書き

キャッシングは、簡単にアクセス可能なデータのコピーを維持することによって、アプリケーションのパフォーマンスを向上させるのに役立ちます。 Aspnet Coreには使いやすい2つのキャッシング抽象クラスが用意されています。

メモリキャッシュは、ローカルサーバーのメモリキャッシュにデータを格納します。

分散キャッシュは、クラスタ内のサーバーがアクセスできる中央の場所にデータキャッシュを保持します。それは、3つの実装、つまり、メモリ(ユニットテストとローカル開発者用)、RedisとSql Serverで実装されています。

ASP.NETコアアプリケーションでのInMemoryキャッシュの使用

ASP.NETアプリケーションでメモリ内キャッシュを使用するには、 project.jsonファイルに次の依存関係を追加します。

  "Microsoft.Extensions.Caching.Memory": "1.0.0-rc2-final",

StartupクラスのConfigureServicesメソッドにキャッシュサービス(Microsoft.Extensions.Caching.Memory)を追加します。

services.AddMemoryCache();

アプリケーションのキャッシュに項目を追加するには、以下に示すように任意のクラス(たとえばController)に注入できるIMemoryCacheを使用します。

private IMemoryCache _memoryCache;
public HomeController(IMemoryCache memoryCache)
{
    _memoryCache = memoryCache;
}

Getは値が存在する場合はそれを返しnullが、そうでない場合はnull返しnull

    // try to get the cached item; null if not found
    // greeting = _memoryCache.Get(cacheKey) as string;

    // alternately, TryGet returns true if the cache entry was found
    if(!_memoryCache.TryGetValue(cacheKey, out greeting))

キャッシュに書き込むには、 Setメソッドを使用します。 Setは、値を参照するために使用するキー、キャッシュされる値、およびMemoryCacheEntryOptionsセットをMemoryCacheEntryOptionsます。 MemoryCacheEntryOptions使用すると、絶対時間またはスライド時間ベースのキャッシュ有効期限、キャッシュの優先順位、コールバック、および依存関係を指定できます。以下のサンプルの1つは、

_memoryCache.Set(cacheKey, greeting,
                new MemoryCacheEntryOptions()
                .SetAbsoluteExpiration(TimeSpan.FromMinutes(1)));

分散キャッシング

分散キャッシュを活用するには、使用可能な実装の1つを参照する必要があります。

たとえば、Redis実装を次のように登録します。

public void ConfigureServices(IServiceCollection services)
{
    services.AddDistributedRedisCache(options =>
    {
        options.Configuration = "ServerAdress";
        options.InstanceName = "InstanceName";
    });
}

必要なIDistributedCache依存関係が必要です。

public class BooksController {
    private IDistributedCache distributedCache;

    public BooksController(IDistributedCache distributedCache) {
        this.distributedCache = distributedCache;
    }

    [HttpGet]
    public async Task<Books[]> GetAllBooks() {
        var serialized = this.distributedCache.GetStringAsync($"allbooks");
        Books[] books = null;
        if (string.IsNullOrEmpty(serialized)) {
            books = await Books.FetchAllAsync();
            this.distributedCache.SetStringAsync($"allbooks", JsonConvert.SerializeObject(books));
        } else {
            books = JsonConvert.DeserializeObject<Books[]>(serialized);
        }
        return books;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow