利用Spring.Net技术打造可切换的分布式缓存读写类

作者:北京诚信汇发物流有限公司  来源:www.cxhfwL.com  发布时间:2017-09-06 11:37:49
利用Spring.Net技术打造可切换的分布式缓存读写类 利用Spring.Net技术打造可切换的Memcached分布式缓存读写类

Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具有高效的读写和分布式的优势,上一篇博文《Memcached在Windows下的配置和使用》已经对介绍过它在windows上的配置和使用。

新建ICacheWriter类--CacheWriter的接口,以达到通过配置文件可以切换缓存读写方式,例如,缓存读写也可以通过httpruntime.cache来进行。

代码如下:

复制代码

1 public interface ICacheWriter

2 {

3 void Set(string key, object value, DateTime exp);

4 void Set(string key, object value);

5 object Get(string key);

6 }

复制代码

在配置文件中的appSettings节点下添加memcached服务器地址。例如:

<add key="memcachedServer" value="127.0.0.1:11211" />

新建MemcachedWriter类,代码如下:

复制代码

1 //单例模式

2 private static readonly MemcachedClient client;

3 static MemcachedWriter()

4 {

5

6 string[] servers = ConfigurationManager.AppSettings["memcachedServer"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

7

8 //初始化socket池

9 SockIOPool pool = SockIOPool.GetInstance();

10 pool.SetServers(servers);

11 pool.InitConnections = 1;

12 pool.MinConnections = 1;

13 pool.MaxConnections = 3;

14 pool.SocketConnectTimeout = 1000;//socket连接超时,采集软件,闲置多少毫秒后销毁socket

15 pool.SocketTimeout = 3000;

16 pool.MaintenanceSleep = 30;//维护线程休息时间

17 pool.Failover = true;//失效转移(一种备份操作模式)

18 pool.Nagle = false;//是否用nagle算法启动socket

19 pool.Initialize();//应用设置并初始化socket池

20

21 //创建memcached客户端

22 client = new MemcachedClient();

23 client.EnableCompression = false;//是否进行压缩

24

25 }

26 public void Set(string key, object value, DateTime exp)

27 {

28 client.Set(key, value, exp);

29 }

30

31 public void Set(string key, object value)

32 {

33 client.Set(key, value);

34 }

35

36 public object Get(string key)

37 {

38 return client.Get(key);

39 }

复制代码

这样就可以通过配置来添加和修改服务器。

有了接口类和实现类,下一步我们就要利用Spring.Net实现它的工厂。

新建CacheHelper类,代码如下:

复制代码

1    public class CacheHelper

2 {

3 public static ICacheWriter CacheWriter { get; set; }

4

5 static CacheHelper()

6 {

7 //如果是静态的属性,想让它有注入的值,就必须先创建一个实例后,才能注入

8 //静态方法调用的时候,不需要Spring容器创建实例,所以属性CacheWriter没有注入实例

9 //在类的静态构造函数中强制让Spring容器为我们创建一个属性的实例,因为属性是静态的,所以只需要创建一次即可

10

11 IApplicationContext ctx = ContextRegistry.GetContext();

12 ctx.GetObject("CacheHelper");

13

14 }

15 public static void WriteCache(string key,object value,DateTime exp)

16 {

17 CacheWriter.Set(key, value, exp);

18 }

19 public static void WriteCache(string key, object value)

20 {

21 CacheWriter.Set(key, value);

22 }

23

24 public static object GetCache(string key)

25 {

26 return CacheWriter.Get(key);

27 }

28 }

复制代码

public static ICacheWriter CacheWriter { get; set; }

这个属性就是Spring.Net的注入点。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:鄂州SEO http://ezhou.4567w.com


上一篇:现行广告政策下 整形美容医院发展之路
下一篇:最后一页