缓存工厂之Redis缓存
作者:网络转载 发布时间:[ 2016/10/27 10:27:25 ] 推荐标签:缓存 .NET
>搭建Redis服务端,并用客户端连接
>封装缓存父类,定义Get,Set等常用方法
>定义RedisCache缓存类,执行Redis的Get,Set方法
>构造出缓存工厂调用方法
下面一步一个脚印的来分享:
>搭建Redis服务端,并用客户端连接
首先,咋们去这个地址下载安装文件https://github.com/dmajkic/redis/downloads,我这里的版本是:redis-2.4.5-win32-win64里面有32位和64位的执行文件,我这里服务器是64位的下面给出截图和用到部分程序的说明:
现在,咋们直接可以用鼠标双击redis-server.exe这个应用程序,这样打开了redis服务窗体(您也可以下载一个windows服务承载器,把redis服务运行在windows的服务中,不用担心每次关闭redis服务黑色窗体后无法访问redis了),运行起来是这样:
有红色框的信息表示成功了,这里redis服务监听的端口默认是6379,要修改端口或者更多的配置信息请找到redis.conf配置文件,具体配置信息介绍可以来这里http://www.shouce.ren/api/view/a/6231
再来,打开客户端连接服务端,咋们退到64bit文件夹的目录中,鼠标移到64bit文件夹上并且安装Shift键,同时点击鼠标的右键,选中"在此处打开命令窗口"这样快速进入到了该文件夹的cmd命令窗口中(当然不同的操作系统不同,这里演示的是windows的操作;还有其他进入的方式这里不做介绍,因为个人感觉这是快的);然后,在命令窗口中录入redis-cli.exe -h localhost -p 6379回车来访问服务端,效果图:
再来看下服务端窗体截图:
没错这样客户端连接上服务端了,可以简单在客户端执行下set,get命令:
如果是客户端要访问远程的redis服务端,只需要把localhost换成可访问的ip行了如果还需要密码等更多配置请去上面的那个地址链接;
>封装缓存父类,定义Get,Set等常用方法
先来,上父类的代码:
1 public class BaseCache : IDisposable
2 {
3 protected string def_ip = string.Empty;
4 protected int def_port = 0;
5 protected string def_password = string.Empty;
6
7 public BaseCache()
8 {
9
10 }
11
12 public virtual void InitCache(string ip = "", int port = 0, string password = "")
13 {
14
15 }
16
17 public virtual bool SetCache<T>(string key, T t, int timeOutMinute = 10) where T : class,new()
18 {
19
20 return false;
21 }
22
23 public virtual T GetCache<T>(string key) where T : class,new()
24 {
25
26 return default(T);
27 }
28
29 public virtual bool Remove(string key)
30 {
31
32 return false;
33 }
34
35 public virtual bool FlushAll()
36 {
37
38 return false;
39 }
40
41 public virtual bool Any(string key)
42 {
43
44 return false;
45 }
46
47 public virtual void Dispose(bool isfalse)
48 {
49
50 if (isfalse)
51 {
52
53
54 }
55 }
56
57 //手动释放
58 public void Dispose()
59 {
60
61 this.Dispose(true);
62 //不自动释放
63 GC.SuppressFinalize(this);
64 }
65 }
这里定义的方法没有太多的注释,更多的意思我想看方法名称明白了,这个父类主要实现了IDisposable,实现的Dispose()中主要用来释放资源并且自定义了一个public virtual void Dispose(bool isfalse)方法,这里面有一句是GC.SuppressFinalize(this);按照官网介绍的意思是阻塞自动释放资源,其他的没有什么了,继续看下面的
>定义RedisCache缓存类,执行Redis的Get,Set方法
首先,咋们分别定义类RedisCache,MemcachedCache(这里暂未实现对memcache缓存的操作),并且继承BaseCache,重写Set,Get方法如下代码:
1 /// <summary>
2 /// Redis缓存
3 /// </summary>
4 public class RedisCache : BaseCache
5 {
6 public RedisClient redis = null;
7
8 public RedisCache()
9 {
10
11 //这里去读取默认配置文件数据
12 def_ip = "172.0.0.1";
13 def_port = 6379;
14 def_password = "";
15 }
16
17 #region Redis缓存
18
19 public override void InitCache(string ip = "", int port = 0, string password = "")
20 {
21
22 if (redis == null)
23 {
24 ip = string.IsNullOrEmpty(ip) ? def_ip : ip;
25 port = port == 0 ? def_port : port;
26 password = string.IsNullOrEmpty(password) ? def_password : password;
27
28 redis = new RedisClient(ip, port, password);
29 }
30 }
31
32 public override bool SetCache<T>(string key, T t, int timeOutMinute = 10)
33 {
34
35 var isfalse = false;
36
37 try
38 {
39 if (string.IsNullOrEmpty(key)) { return isfalse; }
40
41 InitCache();
42 isfalse = redis.Set<T>(key, t, TimeSpan.FromMinutes(timeOutMinute));
43 }
44 catch (Exception ex)
45 {
46 }
47 finally { this.Dispose(); }
48 return isfalse;
49 }
50
51 public override T GetCache<T>(string key)
52 {
53 var t = default(T);
54 try
55 {
56 if (string.IsNullOrEmpty(key)) { return t; }
57
58 InitCache();
59 t = redis.Get<T>(key);
60 }
61 catch (Exception ex)
62 {
63 }
64 finally { this.Dispose(); }
65 return t;
66 }
67
68 public override bool Remove(string key)
69 {
70 var isfalse = false;
71 try
72 {
73 if (string.IsNullOrEmpty(key)) { return isfalse; }
74
75 InitCache();
76 isfalse = redis.Remove(key);
77 }
78 catch (Exception ex)
79 {
80 }
81 finally { this.Dispose(); }
82 return isfalse;
83 }
84
85 public override void Dispose(bool isfalse)
86 {
87
88 if (isfalse && redis != null)
89 {
90
91 redis.Dispose();
92 redis = null;
93 }
94 }
95
96 #endregion
97 }
98
99
100 /// <summary>
101 /// Memcached缓存
102 /// </summary>
103 public class MemcachedCache : BaseCache
104 {
105
106
107 }
View Code
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11