AppFabric_RAZApp

AppFabric_RAZAppAppFabric的开发相对还是很简单的,最常见的方法无非是声明一个缓存接口,然后由各种缓存实现.具体的使用除了msdn:http://msdn.microsoft.com/zh-cn/library/hh334305这是实例包的下载地址:http://www.microsoft.com/en-us/download/confirmation.aspx?id=19603这篇博客介绍得不错.使用微软

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

AppFabric的开发相对还是很简单的,最常见的方法无非是声明一个缓存接口,然后由各种缓存实现.

具体的使用除了msdn:

http://msdn.microsoft.com/zh-cn/library/hh334305
这是实例包的下载地址:

http://www.microsoft.com/en-us/download/confirmation.aspx?id=19603

这篇博客介绍得不错.

使用微软分布式缓存服务Velocity(Windows Server AppFabric Caching Service)

概述

Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的缓存服务器。Velocity也将集成在.NET Framework 4.0中,本文将介绍Velocity中的配置模型、缓存复杂数据和创建分区、使用标签以及ASP.NET SessionState提供者。

配置模型

在本文开始之前,先简单介绍一下Velocity中的配置模型,主要包括三方面的配置,缓存集群的配置,缓存宿主服务器配置以及应用程序的配置,如下图所示:

Velocity_001

缓存集群的配置,可以基于XML、SQL Server CE或者SQL Server数据库来进行存储,包括各个服务器以及所有的命名缓存、是否过期等配置,当我们使用Windows PowerShell管理工具进行配置时,将会修改该配置文件,如下代码所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="dcache" type="System.Data.Caching.DCacheSection, 
             CacheBaseLibrary, Version=1.0.0.0, Culture=neutral,
             PublicKeyToken=89845dcd8080cc91" />
  </configSections>
  <dcache cluster="localhost" size="Small">
    <caches>
      <cache type="partitioned" consistency="strong" name="default">
        <policy>
          <eviction type="lru" />
          <expiration defaultTTL="10" isExpirable="true" />
        </policy>
      </cache>
      <cache type="partitioned" consistency="strong" name="other">
        <policy>
          <eviction type="lru" />
          <expiration defaultTTL="10" isExpirable="true" />
        </policy>
      </cache>
    </caches>
    <hosts>
      <host clusterPort="22234" hostId="1319514812" size="1024" quorumHost="true"
          name="TERRYLEE-PC" cacheHostName="DistributedCacheService"
          cachePort="22233" />
    </hosts>
    <advancedProperties>
      <partitionStoreConnectionSettings providerName="System.Data.SqlServerCe.3.5"
          connectionString="D:\CacheShare\ConfigStore.sdf" />
    </advancedProperties>
  </dcache>
</configuration>


在上一篇的示例中,并没有使用应用程序配置文件,事实上使用配置文件是更好的编程实践,首先需要添加一个配置区:

<section name="dcacheClient"
type="System.Data.Caching.DCacheSection, 
      CacheBaseLibrary, Version=1.0.0.0, 
      Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

配置信息包括部署方式,是否启用本地缓存以及缓存宿主等,如下代码所示:

<dcacheClient>
  <localCache isEnabled="true" sync="TTLBased" ttlValue="300" />
  <hosts>
    <host name="localhost" cachePort="22233" 
          cacheHostName="DistributedCacheService"/>
  </hosts>
</dcacheClient>


现在Velocity CTP2对于应用程序使用配置的支持似乎有些问题。缓存宿主的配置放在DistributedCache.exe.config文件中,可以在Velocity安装目录下找到。

缓存复杂数据类型

在Velocity中,可以缓存任何类型的数据,如CLR对象、XML或者二进制数据等。现在看一个简单的示例,如何缓存复杂类型数据,定义一个如下的Customer类,注意要能够序列化:

[Serializable]
public class Customer
{
    public String ID { get; set; }
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public int Age { get; set; }
    public String Email { get; set; }
}

对应用程序做配置,参考本文的配置模型部分,使用方法与简单数据类型的基本一致,如添加缓存项,使用Customer主键作为缓存键,其中GetCurrentCache()方法的实现请参考上一篇文章:

Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
    ID = "C20081117002",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};
cache.Add(customer.ID, customer);

获取缓存项:

Cache cache = GetCurrentCache();
Customer customer = cache.Get("C20081117002") as Customer;

移除缓存项:

Cache cache = GetCurrentCache();
cache.Remove("C20081117002");

更新缓存中数据,可以有两种方法,一是直接使用缓存索引,如果确保缓存键存在:

Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
    ID = "C20081117002",
    FirstName = "Huijui",
    LastName = "Li",
    Age = 26,
    Email = "lhj_cauc[#AT#]163.com"
};
cache["C20081117002"] = customer;

另外一种是使用Put方法,如果缓存键不存在,它将会新增到缓存中,否则会进行覆盖,如下代码所示:

Cache cache = GetCurrentCache();
Customer customer = new Customer()
{
    ID = "C20081117002",
    FirstName = "Huijui",
    LastName = "Li",
    Age = 26,
    Email = "lhj_cauc[#AT#]163.com"
};
cache.Put(customer.ID, customer);

使用分区

在实际部署中,经常会出现多个应用程序共享同一个缓存集群,这不可避免的会出现缓存键冲突,如上面的示例中使用CustomerID作为缓存键,此时可以使用Velocity中的分区功能,它会在逻辑上把各个命名缓存再进行分区,这样可以完全保持数据隔离,如下图所示:

TerryLee_0216

图中共有三个命名缓存,其中在缓存Catalog中又分区为Sports和Arts。在Velocity中对于分区的操作提供了如下三个方法,可以用于创建分区,删除分区以及清空分区中所有的对象:

public void ClearRegion(string region);
public bool CreateRegion(string region, bool evictable);
public bool RemoveRegion(string region);

如下代码所示,创建了一个名为“Customers”的分区,在调用Add方法时可以指定数据将会缓存到哪个分区:

Cache cache = GetCurrentCache();
string regionName = "Customers";
cache.CreateRegion(regionName, false);
Customer customer = new Customer()
{
    ID = "C20081117003",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};
cache.Add(regionName, customer.ID, customer);

可以使用Get-CacheRegion命令在Windows PowerShell中来查看一下当前缓存集群中所有的分区信息,如下图所示:

Velocity_002

同样在检索缓存数据时,仍然可以使用分区名进行检索。

使用标签

在Velocity还允许对加入到缓存中的缓存项设置Tag,可以是一个或者多个,使用了Tag,就可以从多个方面对缓存项进行描述,这样在检索数据时,就可以根据Tag来一次检索多个缓存项。为缓存项设置Tag,如下代码所示:

Cache cache = GetCurrentCache();
string regionName = "Customers";
Customer customer1 = new Customer()
{
    ID = "C20081117004",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};
Customer customer2 = new Customer()
{
    ID = "C20081117005",
    FirstName = "Terry",
    LastName = "Lee",
    Age = 25,
    Email = "lhj_cauc[#AT#]163.com"
};
Tag tag1 = new Tag("Beijing");
Tag tag2 = new Tag("Tianjin");
cache.Add(regionName, customer1.ID, customer1, new Tag[] { tag1, tag2 });
cache.Add(regionName, customer2.ID, customer2, new Tag[] { tag2 });

这样就可以对设置了Tag的缓存项进行检索,根据实际需求选择使用如下三个方法之一:

GetAllMatchingTags(string region, Tag[] tags)
GetAnyMatchingTag(string region, Tag[] tags)
GetByTag(string region, Tag tag)

第一个检索匹配所有Tag的数据,第二个检索匹配所有Tag中的任意一个即可,最后只使用一个Tag,如下代码所示:

string regionName = "Customers";
Tag[] tags = new Tag[] { new Tag("Beijing"), 
           new Tag("Tianjin")};
List<KeyValuePair<string, object>> result
    = cache.GetAllMatchingTags(regionName, tags);

使用Tag功能对于检索缓存项提供了极大的灵活性,对于任何一个数据,都可以使用多个Tag从很多方面去描述它。

ASP.NET SessionState提供者

Velocity还提供了对于ASP.NET SessionState提供者的支持,可以通过配置把Session信息缓存到缓存集群中,添加Velocity配置区:

<section name="dcacheClient"
type="System.Data.Caching.DCacheSection, 
      CacheBaseLibrary, Version=1.0.0.0, 
      Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>

配置缓存客户端信息:

<dcacheClient>
  <localCache isEnabled="true" sync="TTLBased" ttlValue="300" />
  <hosts>
    <host name="localhost" cachePort="22233" 
          cacheHostName="DistributedCacheService"/>
  </hosts>
</dcacheClient>


配置SessionState信息:

<sessionState mode="Custom" customProvider="Velocity">
  <providers>
    <add name="Velocity" 
         type="System.Data.Caching.SessionStoreProvider,ClientLibrary"
         cacheName="default"/>
  </providers>
</sessionState>

需要指定使用哪个命名缓存,但是该功能似乎到目前还存在问题,无法测试通过L

总结

本文简单介绍了Velocity的配置模型,以及如何缓存复杂数据类型,对命名缓存分区,为缓存项设置Tag,以及对于ASP.NET SessionState的支持,希望对大家有用。

本文出自 “TerryLee技术专栏” 博客,请务必保留此出处http://terrylee.blog.51cto.com/342737/151964

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181014.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • ov7725摄像头人脸识别_ov7725摄像头

    ov7725摄像头人脸识别_ov7725摄像头OV7725摄像头软件实现简单的二值化处理项目使用的摄像头型号:​ 正点原子OV7725摄像头模块,带FIFO的摄像头模块。图像二值化化的个人见解:​ 常见的图片格式:​ 黑白图片、灰度图片、彩色图片。不同的图片的格式类型主要的不同点在每个像素点需要几位的二位数来表示。黑白图片每个像素不是0就是1,0代表黑颜色,1代表白颜色。灰度图像每个像素需要一个字节表示(8位二进制)每个像素可以量化…

  • Mybatis源码:@MapperScan解析过程

    Mybatis源码:@MapperScan解析过程目录0.说明1.@MapperScan2.MapperScannerRegister3.ClassPathMapperScanner4.MapperFactoryBean0.说明mybatis构建过程主要包括:解析mybatis配置文件,构造Configuration配置类对象和SqlSessionFactory; 利用@MapperScan注册BeanDe…

  • 排序算法最坏情况下的比较次数怎么算_选择排序最坏情况

    排序算法最坏情况下的比较次数怎么算_选择排序最坏情况在最坏情况下,冒泡排序、直接插入排序与简单选择排序法均需要比较n(n-1)/2次。希尔排序需要比较n^1.5次,堆排序需要比较的次数最少,为nlog2n。

  • python字符串删除指定符号(不限位置)「建议收藏」

    python字符串删除指定符号(不限位置)「建议收藏」python中去掉字符串中某些不想要的字符:1、一般的可以用replace()这个函数不限定位置,是可以替换原来不想要的字符,替换成空字符就相当于删除了2、也可以用strip(),删除两边的字符(默认是删除左右空格)rstrip(),lstrip()这两个可以选择只删除左边或者右边3、re.sub这个可以根据正则删除,此处是删除串中的数字1-9,字符a-z,A-Z,还可以加其他的importrestr=”aksj2343ngr4545g黄金叶子fg”temp=re.sub(‘[a

  • 查看端口占用的进程_cmd查看端口占用

    查看端口占用的进程_cmd查看端口占用在开发中经常会遇到端口占用问题,例如下面,npmstart报的错误:1.查看端口占用情况命令lsof-itcp:8080输出结果:字段说明:字段名说明COMMAND进程名称PID进程标识符USER进程所有者FD文件描述符,应用程序通过文件描述符识别该文件TYPE文件类型,文件REG、目录DIR、字符CHR、块设备…

  • 添加网页背景音乐的两种方法是什么_html怎么添加背景音乐

    添加网页背景音乐的两种方法是什么_html怎么添加背景音乐为网页添加背景音乐的方法一般有两种,第一种是通过普通的标签来添加,另一种是通过标签来添加 1.其中,loop=”-1″表示音乐无限循环播放,如果你要设置播放次数,则改为相应的数字即可2.。 第一种方法当页面打开时音乐播放,如果将页面最小化以后播放音乐会自动暂停,第二种方法则不会出现这种情况,只要不将窗口关闭,它会一直播放 ■  :    是用以插入背景音

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号