Csharp/C#教程:web api中的内存缓存分享


web api中的内存缓存

我在我的web api中寻找缓存 ,我可以使用一个api方法的输出(在12小时内更改一次)进行后续调用,然后我在SO上找到了这个解决方案 ,但是我很难理解并使用下面的代码

private IEnumerable GetFromCache(string key, Func<IEnumerable> valueFactory) where TEntity : class { ObjectCache cache = MemoryCache.Default; var newValue = new Lazy<IEnumerable>(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>; return (value ?? newValue).Value; // Lazy handles the locking itself } 

我不确定如何在下面的上下文中调用和使用此方法? 我有一个方法Get

  public IEnumerable Get() { return repository.GetEmployees().OrderBy(c => c.EmpId); } 

我想缓存Get的输出并在我的其他方法GetEmployeeById()或Search()中使用它

  public Movie GetEmployeeById(int EmpId) { //Search Employee in Cached Get } public IEnumerable GetEmployeeBySearchString(string searchstr) { //Search in Cached Get } 

我更新了您的方法以返回类而不是IEnumberable:

 private TEntity GetFromCache(string key, Func valueFactory) where TEntity : class { ObjectCache cache = MemoryCache.Default; // the lazy class provides lazy initializtion which will eavaluate the valueFactory expression only if the item does not exist in cache var newValue = new Lazy(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; return (value ?? newValue).Value; // Lazy handles the locking itself } 

那么你可以使用这种方法:

 public Movie GetMovieById(int movieId) { var cacheKey = "movie" + movieId; var movie = GetFromCache(cacheKey, () => { // load movie from DB return context.Movies.First(x => x.Id == movieId); }); return movie; } 

并搜索电影

上述就是C#学习教程:web api中的内存缓存分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 [ActionName("Search")] public IEnumerable GetMovieBySearchParameter(string searchstr) { var cacheKey = "movies" + searchstr; var movies = GetFromCache>(cacheKey, () => { return repository.GetMovies().OrderBy(c => c.MovieId).ToList(); }); return movies; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998283.html

(0)
上一篇 2021年12月26日
下一篇 2021年12月26日

精彩推荐