私は自分の Web API でキャッシングを探していました。そこでは、1 つの API メソッド (12 時間に 1 回変更される) の出力を後続の呼び出しに使用できます。その後、SO でこのソリューションを見つけましたが、以下のコードを理解して使用するのが困難です。
private IEnumerable<TEntity> GetFromCache<TEntity>(string key, Func<IEnumerable<TEntity>> valueFactory) where TEntity : class
{
ObjectCache cache = MemoryCache.Default;
var newValue = new Lazy<IEnumerable<TEntity>>(valueFactory);
CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(30) };
//The line below returns existing item or adds the new value if it doesn't exist
var value = cache.AddOrGetExisting(key, newValue, policy) as Lazy<IEnumerable<TEntity>>;
return (value ?? newValue).Value; // Lazy<T> handles the locking itself
}
以下のコンテキストでこのメソッドを呼び出して使用する方法がわかりませんか? Getメソッドがあります
public IEnumerable<Employee> Get()
{
return repository.GetEmployees().OrderBy(c => c.EmpId);
}
Get の出力をキャッシュして、他のメソッド GetEmployeeById() または Search() で使用したい
public Movie GetEmployeeById(int EmpId)
{
//Search Employee in Cached Get
}
public IEnumerable<Employee> GetEmployeeBySearchString(string searchstr)
{
//Search in Cached Get
}