经过前几篇文章的理论阐述后,现在开始演练下
一、缓存服务准备
我没有太多的资源,所有东西都安装在我的PC机上(这台笔记本所有权不是我的,历史悠久,还掉了一个键,穷啊,只能接上外接键盘).使用默认设置安装过完成。
用安装后自带的PowerShell工具添加一个名为“FirstCache”缓存。命令好下:
New-Cache FirstCache
用Get-CacheHost命令查看现有主机:
主机名为:FENGXU-MSFT,端口号是默认的22233,服务名为默认的:DistributedCacheService
用Get-Cache命令查看现有的缓存
可以看到群集中有两个缓存,default是安装后默认的一个缓存,FirstCache是刚刚自己创建的缓存
二、缓存基本API使用
新建一个工程,添加上一篇中的四个程序集的引用,配置app.config文件如下
app.config<?xml version="1.0"?>
<configuration>
<!--configSections must be the FIRST element -->
<configSections>
<!-- required to read the <dataCacheClient> element -->
<section name="dataCacheClient" type="Microsoft.Data.Caching.DataCacheClientSection,
CacheBaseLibrary" allowLocation="true" allowDefinition="Everywhere"/>
<!-- required to read the <fabric> element, when present -->
<section name="fabric" type="System.Data.Fabric.Common.ConfigFile,
FabricCommon" allowLocation="true" allowDefinition="Everywhere"/>
</configSections>
<!-- routing client-->
<dataCacheClient deployment="simple" timeout="30000">
<!-- (optional) specify local cache
<localCache
isEnabled="true"
sync="TTLBased"
objectCount="100000"
ttlValue="300" />
-->
<!--(optional) specify cache notifications poll interval
<clientNotification pollInterval="300" />
-->
<!-- cache host(s) -->
<hosts>
<host name="FENGXU-MSFT" cachePort="22233" cacheHostName="DistributedCacheService"/>
</hosts>
</dataCacheClient>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
这里使用的是本地缓存,在host节点中host name 是cache hosts的主机名,cacheHostName是服务名。
在代码中的基本读写
cache client基本使用using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//添?加ó命ü名?空?间?
using Microsoft.Data.Caching;
namespace VolocityDemo
{
class BaseMethod
{
DataCacheFactory factory;
public BaseMethod()
{
//方?法ぁ?一?:阰使?用?默?认?配?置?创洹?建¨
factory = new DataCacheFactory();
//代洙?码?中D动ˉ态?指?定¨
//方?法ぁ?二t:阰declare array for cache host(s)
//DataCacheServerEndpoint[] servers = new DataCacheServerEndpoint[1];
////specify cache host(s)
//servers[0] = new DataCacheServerEndpoint("FENGXU-MSFT",
// 22233, "DistributedCacheService");
//factory = new DataCacheFactory(servers, false, false);
}
~BaseMethod()
{
factory.Dispose();
}
public void Test()
{
DataCache dataCache = factory.GetCache("FirstCache");
//添?加ó缓o存?对?象ó
if (dataCache.Get("Time1") == null)
{
dataCache.Add("Time1", DateTime.Now);
}
Console.WriteLine(string.Format("读á取?缓o存?对?象óTime1:阰{0:yyyy-MM-dd HH:mm:ss}", dataCache.Get("Time1")));
dataCache.Put("Time1", DateTime.Now);
Console.WriteLine(string.Format("读á取?更ü新?的?缓o存?对?象óTime1:阰{0:yyyy-MM-dd HH:mm:ss}", dataCache.Get("Time1")));
//移?除y对?象ó
//remove object in cache using array notation
dataCache["Time1"] = null;
//remove object in cache using key "Key0"
//dataCache.Remove("Key0");
}
}
}
当缓存群集重启时,缓存服务将从配置文件中加载现有的缓存配置,FirstCache将仍然存在。还可以用powershell工具Export-CacheClusterConfig命令
先将缓存的配置先用导出来,再用Import-CacheClusterConfig命令导出来
示例中导出的配置如下:
导出的配置<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dataCache" type="Microsoft.Data.Caching.DataCacheSection, CacheBaseLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</configSections>
<dataCache cluster="demoCache" 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="FirstCache">
<policy>
<eviction type="lru" />
<expiration defaultTTL="10" isExpirable="true" />
</policy>
</cache>
</caches>
<hosts>
<host clusterPort="22234" hostId="1743595319" size="1228" quorumHost="true"
name="FENGXU-MSFT" cacheHostName="DistributedCacheService"
cachePort="22233" />
</hosts>
<advancedProperties>
<partitionStoreConnectionSettings providerName="System.Data.SqlServerCe.3.5"
connectionString="\\127.0.0.1\MicrosoftDistributeCache\ConfigStore.sdf" />
</advancedProperties>
</dataCache>
</configuration>