zoukankan      html  css  js  c++  java
  • 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore团队

    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

  • 相关阅读:
    字体
    abstract关键词
    final关键词
    多态
    接口
    java面向对象
    java运算符
    JDK安装
    循环
    TextView控件
  • 原文地址:https://www.cnblogs.com/cmt/p/6163455.html
Copyright © 2011-2022 走看看