1. 介绍
EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 GitHub 上:https://github.com/cnblogs/EnyimMemcachedCore ,NuGet 包地址:https://www.nuget.org/packages/EnyimMemcachedCore 。
2. 使用说明
2.1 安装 NuGet 包
Install-Package EnyimMemcachedCore
2.2 配置
2.2.1 在 appsetting.json 中进行配置
1)不带验证的配置
{ "enyimMemcached": { "Servers": [ { "Address": "memcached", "Port": 11211 } ] } }
2)带验证的配置
{ "enyimMemcached": { "Servers": [ { "Address": "memcached", "Port": 11211 } ], "Authentication": { "Type": "Enyim.Caching.Memcached.PlainTextAuthenticator", "Parameters": { "zone": "", "userName": "username", "password": "password" } } } }
3)Startup.cs 中的配置代码
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddEnyimMemcached(options => Configuration.GetSection("enyimMemcached").Bind(options)); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseEnyimMemcached(); } }
2.2.2 直接硬编码配置(无需配置文件)
Startup.cs 中的硬编码配置代码
public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddEnyimMemcached(options => { options.AddServer("memcached", 11211); //options.AddPlainTextAuthenticator("", "usename", "password"); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseEnyimMemcached(); } }
2.3 调用
2.3.1 使用 IMemcachedClient 接口
public class TabNavService { private ITabNavRepository _tabNavRepository; private IMemcachedClient _memcachedClient; public TabNavService( ITabNavRepository tabNavRepository, IMemcachedClient memcachedClient) { _tabNavRepository = tabNavRepository; _memcachedClient = memcachedClient; } public async Task<IEnumerable<TabNav>> GetAll() { var cacheKey = "aboutus_tabnavs_all"; var result = await _memcachedClient.GetAsync<IEnumerable<TabNav>>(cacheKey); if (!result.Success) { var tabNavs = await _tabNavRepository.GetAll(); await _memcachedClient.AddAsync(cacheKey, tabNavs, 300); return tabNavs; } else { return result.Value; } } }
2.3.2 使用 IDistributedCache 接口(来自 Microsoft.Extensions.Caching.Abstractions )
public class CreativeService { private ICreativeRepository _creativeRepository; private IDistributedCache _cache; public CreativeService( ICreativeRepository creativeRepository, IDistributedCache cache) { _creativeRepository = creativeRepository; _cache = cache; } public async Task<IList<CreativeDTO>> GetCreatives(string unitName) { var cacheKey = $"creatives_{unitName}"; IList<CreativeDTO> creatives = null; var creativesJson = await _cache.GetStringAsync(cacheKey); if (creativesJson == null) { creatives = await _creativeRepository.GetCreatives(unitName) .ProjectTo<CreativeDTO>().ToListAsync(); var json = string.Empty; if (creatives != null && creatives.Count() > 0) { json = JsonConvert.SerializeObject(creatives); } await _cache.SetStringAsync( cacheKey, json, new DistributedCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromMinutes(5))); } else { creatives = JsonConvert.DeserializeObject<List<CreativeDTO>>(creativesJson); } return creatives; } }
3. 问题支持
如果在使用中遇到问题,麻烦您在 GitHub 上提交 Issue 。
时间: 2024-10-17 08:17:31