SharedCache从源码结构中很容易看出是基于.NET平台构建的,目前最新版本的SharedCache只支持.NET2.0下缓存共享支持.当前SharedCache版本说明:
下面引用ShareCache做一个简单实例DEMO.注意说明以.NET2.0环境下WebSite站点形式演示.
A:准备工作
(1)用开发工具VS08打开已经下载的SharedCache源码,对整个解决方案进行重新生成操作-生成bin目录下对自定义项目可以引用的DLL.
(2)运行SharedCache源码项目搭建服务器环境(默认解决方案是SharedCache.WinService),会有一个控制台程序提示界面如下:
注意:控制台'+'后提示语句为—"本地服务器已经准备好接受缓存数据,通信端口48888监听已经开始".表明在本地已经成功构建了SharedCache缓存数据服务器环境.
B:测试程序建立
注意:
(1)在用VS开发工具建立WebSite站点测试程序时设定环境是.NET 2.0环境.
(2)对新建本地项目添加SharedCache 引用. 重新生成解决方案后引用SharedCache.WinServiceCommon项目bin目录下:NLog.dll , SharedCache.WinServiceCommon.dll
做好上面工作后,编写简单测试程序如下:
(3)页面代码如下:
1
<
asp:Label
ID
="Label1"
runat
="server"
Text
="Label"
></
asp:Label
>
2
<
br
/>
3
<
asp:TextBox
ID
="TextBox1"
runat
="server"
style
=" font-weight:bold; color:Red;"
></
asp:TextBox
>
(4)后台代码:在SharedCache保存第一次加载的时间, 然后每次都从共享缓存中取数据.代码如下:
1
protected
void
Page_Load(
object
sender, EventArgs e)
2
{
3
//
测试Code
4
//
Author:chenkai Date:2009年12月22日14:16:36
5
this
.Label1.Text
=
"
用时间来测试SharedCache:
"
;
6
7
string
firstCachekey
=
@"
First_SharedCache_key
"
;
8
9
//
该方法没有重写 只能通过key获得缓存对象
10
string
getresult
=
Convert.ToString(IndexusDistributionCache.SharedCache.Get(firstCachekey));
11
12
if
(
string
.IsNullOrEmpty(getresult))
13
{
14
//
第一次加载 存储缓存中
15
getresult
=
DateTime.Now.ToString();
16
//
该Add方法在源码被重写了10次 详细请看SharedCache文档
17
IndexusDistributionCache.SharedCache.Add(firstCachekey,getresult);
18
}
19
20
this
.TextBox1.Text
=
getresult;
21
}
测试程序写好后,下不要急于运行,注意这里有几个步骤要走:
A:在Web.Config文件中配置整个解决方案
B:运行SharedCache的服务器端
C:上面两步部署好后,重新编译应用程序 开始运行.
(5)配置Web.Config文件方法:
在下载的源码中有一个SharedCache.WinServiceTestClient项目中,这个项目是个测试程序打开其中根目录下配置文件App.config.
折叠所有的App.config文件中标签,截取复制<configuration></configuration>标签中的代码, 截图如下:
放置在测试项目根目录下Web.Config文件相对应<Appseting/>的位置(覆盖原来的<Appsetting/>标签),重新编译项目,并运行期SharedCache服务器端, 一切就位完毕,运行项目,我们来看一下:SharedCache服务器端提示: 截图如下:
第一次运行:
重复刷新页面:
从服务器提示可以看出,第一次运行时想缓存中添加First_SharedCache_Key对象,刷新页面数据从缓存中搜索并读取出来. 由此实现一个时间String字符窜的缓存共享.
(6)测试用户自定义实体缓存数据共享: 定义实体MyCustomerOrder -[注意客户端定义实体必须标注实体类属性为可序列化]
代码
1 //定义实体类必须定义可序列化 不可缺少
2
[Serializable]
3 public class
MyCustomerOrder
4
{
5 //
定义自动以实体 测试缓存数据存取
6 //Author:chenkai Date:2009年12月22日15:43:16
7
8 private string
ordername;
9
10 public string
Ordername
11
{
12 get { return
ordername; }
13 set { this.ordername =
Ordername; }
14
}
15
16 private string
orderManager;
17
18 public string
OrderManager
19
{
20 get { return
orderManager; }
21 set { this.orderManager =
OrderManager; }
22
}
23
24
25 //override重写对象Tostring的方法
26 public override string
ToString()
27
{
28 return this.ordername + "间隔符" + this
.orderManager;
29
}
30
31 //定义构造方法
32 public MyCustomerOrder(string ordername,string
manager)
33
{
34 this.ordername =
ordername;
35 this.orderManager =
manager;
36
}
37
38 }
页面代码相同 测试后台代码如下:刷新页面后从缓存提取对象数据
1
protected
void
Page_Load(
object
sender, EventArgs e)
2
{
3
//
测试Code
4
//
Author:chenkai Date:2009年12月22日16:16:35
5
6
//
定义一个MyCustomerOrder对象
7
MyCustomerOrder neworder
=
null
;
8
9
this
.Label1.Text
=
"
测试缓存对象
"
;
10
string
secondCacheKey
=
@"
Second_SharedCache_key_1
"
;
11
12
//
从缓存中获得对象
13
neworder
=
IndexusDistributionCache.SharedCache.Get(secondCacheKey)
as
MyCustomerOrder;
14
15
if
(neworder
==
null
)
16
{
17
//
添加缓存中
18
neworder
=
new
MyCustomerOrder(
"
chenkai的测试
"
,
"
提单客户经理人
"
);
19
IndexusDistributionCache.SharedCache.Add(secondCacheKey, neworder);
20
}
21
22
//
提取数据
23
this
.TextBox1.Text
=
neworder.Ordername;
24
}
测试缓存共享一个用户自定义实体对象通过,其中实体类必须标注成可序列化. 其他基本和保持字符窜缓存数据逻辑雷同.