首页 > 代码库 > 自己动手写缓存Version1
自己动手写缓存Version1
实现一个最简单最基本的缓存系统。
using System; using System.Data; using System.Configuration; using System.Web; using System.Collections; using System.Text; using System.Threading; using System.Collections.Generic; using System.Reflection; namespace ConsoleApplication1 { public class MyCache<T> where T : new() { //缓存的数据 private List<T> data; private void SetData(List<T> data) { this.data = http://www.mamicode.com/data;>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Reflection; namespace ConsoleApplication1 { /// <summary> /// DataTable转换为List的辅助类 /// </summary> /// <typeparam name="T"></typeparam> public class ConvertHelper<T> where T : new() { /// <summary> /// 利用反射和泛型 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> ConvertToList(DataTable dt) { // 定义集合 List<T> ts = new List<T>(); // 获得此模型的类型 Type type = typeof(T); //定义一个临时变量 string tempName = string.Empty; //遍历DataTable中所有的数据行 foreach (DataRow dr in dt.Rows) { T t = new T(); // 获得此模型的公共属性 PropertyInfo[] propertys = t.GetType().GetProperties(); //遍历该对象的所有属性 foreach (PropertyInfo pi in propertys) { tempName = pi.Name;//将属性名称赋值给临时变量 //检查DataTable是否包含此列(列名==对象的属性名) if (dt.Columns.Contains(tempName)) { // 判断此属性是否有Setter if (!pi.CanWrite) continue;//该属性不可写,直接跳出 //取值 object value = http://www.mamicode.com/dr[tempName];>
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class UserInfo { public int ID { get; set; } public string UserName { get; set; } public override string ToString() { return "ID:" + this.ID + ",UserName:" + this.UserName; } } }
测试方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using System.Threading; namespace ConsoleApplication1 { class MyCacheTest { public static void Main() { MyCache<UserInfo> mycache = new MyCache<UserInfo>(); //5秒更新一次缓存 mycache.timeoutSecond = 5000; mycache.sql = ""; //启动缓存 mycache.StartCache(); for (int i = 0; i < 100; i++) { //读取缓存 Console.WriteLine("_______________读取缓存,缓存内容如下:"); List<UserInfo> userList = mycache.GetData(); foreach (UserInfo userInfo in userList) { Console.WriteLine(userInfo.ToString()); } //1秒读取一次缓存 Thread.Sleep(1000); } } } }
测试结果如下:
这只是一个最简单的缓存系统,下一个版本希望能够实现如下功能:
1、支持key-value的查找、添加、删除。
2、添加缓存配置文件。
具体的配置文件如下:
<?xml version="1.0" encoding="utf-8" ?> <SQLCommands> <!--所有的用户缓存--> <SQLCommand ListType="UserInfo" CommandString="SELECT * FROM UserInfo" CacheOverTime="0,5,0"></SQLCommand> <!--未处理的订单缓存--> <SQLCommand ListType="UnHandleOrder" CommandString="SELECT * FROM OrderInfo WHERE Orderstatus = 0" CacheOverTime="0,5,0"></SQLCommand> </SQLCommands>
自己动手写缓存Version1
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。