zoukankan      html  css  js  c++  java
  • 在Asp.Net Core中使用CouchBase实现分布式缓存

    Couchbase可以实现Redis的缓存功能同时还可以对数据进行持久化,存入到硬盘中,能够实现水平伸缩,并且对于数据的读写来说都能提供低延迟的访问,Couchbase是基于文档或者是JSON格式数据的存储的数据库。

    下面说明如何在Asp.Net Core中使用CouchBase Server实现分布式缓存:

    首先新建一个Asp.Net Core Web应用程序,选择MVC模板,我讲它命名为CouchBaseMVCTest。

    为了集成CouchBase,在这里需要在NuGet中安装Couchbase.Extensions.Caching,如下:

    现在打开Startup.cs项目中的 文件。需要在ConfigureServices此处为方法添加一些设置代码 。

    services.AddCouchbase(opt =>
    {
    opt.Servers = new List<Uri>
    {
    new Uri("http://********:8091")
    };
    opt.Username = "couchtest";
    opt.Password = "******";
    });
    services.AddDistributedCouchbaseCache("infoqcache", opt => { });

    AddCouchbase是用来连接CouchBase Server服务器的,AddDistributedCouchbaseCache用来指定服务器上新建的Bucket来作为缓存存储桶。

     这里配置自己安装的CouchBase服务器IP及账号密码。文件顶部添加引用如下:

    using Couchbase.Extensions.Caching;
    using Couchbase.Extensions.DependencyInjection;  

    下面我们来简单的使用CouchBase实现分布式缓存。

    首先,将IDistributedCacheas参数添加到构造函数中:

    public class HomeController : Controller
     {
        private IDistributedCache _cache;
    
        public HomeController(IDistributedCache cache)
        {
        	_cache = cache;
        }
     }  

    下面使用ApplicationStopped取消令牌:

    applicationLifetime.ApplicationStopped.Register(() =>
                {
                    app.ApplicationServices.GetRequiredService<ICouchbaseLifetimeService>().Close();
                });  

    添加引用using IApplicationLifetime = Microsoft.Extensions.Hosting.IApplicationLifetime;

    先简单的测试连接服务器,在Home控制器中加入如下代码:

    public IActionResult Index()
    {
    _cache.Set("CacheTime", System.Text.Encoding.UTF8.GetBytes(DateTime.Now.ToString()));
    ViewData["Message"] = "Your application description page. "
    + System.Text.Encoding.UTF8.GetString(_cache.Get("CacheTime"));
    return View();
    }  

    运行项目:

     图中时间就是我们刚刚存入infoacache桶中的,key为CacheTime的时间

    查看CouchBase Server服务器,如下,可以看到我们新建的桶里有一个项目:

    下面我们新建一个类parson:

    public class Parson
        {
            
            public string Id { get; set; }
            public string FullName { get; set; }
        }
    

      

    加入如下代码:

    var obj = new List<Parson>() { new Parson { Id = "1111", FullName = "zyy" },
                    new Parson { Id = "1112", FullName = "zyy2" }
                };
                //注意:如果直接使用object来保存,则Couchbase缓存会帮我们自动加密(Base64)
                //如果先序列化后,再保存,那么就不会加密
                _cache.Set("test1", serialize(obj));
                ViewData["Message"] = "Your application description page. "
                            + System.Text.Encoding.UTF8.GetString(_cache.Get("test1"));
                return View();
    

     结果如下:

     在Couchbase中,数据可以存储为key-value对或者json文档,不需要预先定义严格的格式,由于这种特性,couchbase支持以 scale out(水平扩展)方式扩展数据量,提升io性能,只需要在集群中添加更多的服务器就行了。相反,关系数据库管理系统scale up(纵向扩展),通过加更多的CPU,内存和硬盘以扩展容量。

  • 相关阅读:
    Tinkoff Challenge
    Tinkoff Challenge
    Tinkoff Challenge
    Tinkoff Challenge
    整体二分
    树链剖分+LCT
    上下界网络流
    莫队
    可并堆
    bzoj_1033: [ZJOI2008]杀蚂蚁antbuster
  • 原文地址:https://www.cnblogs.com/zhangyunyun/p/12391537.html
Copyright © 2011-2022 走看看