[代码积累]C#中泛型缓存的简单实现
来源:互联网 发布:淘宝怎么享受极速退款 编辑:程序博客网 时间:2024/06/12 18:51
软谋补课中,Eleven老师讲到泛型的使用技巧:泛型缓存,刚好自己项目中也有用到缓存系统参数表的信息,之前都是直接读取表数据,每个需要缓存的表需要创建一个静态类,不利于扩展,这里将Eleven老师讲的泛型缓存简单的拓展了一下,可以根据版本信息更新缓存,不多说直接上代码:
/// <summary> /// 使用泛型实现缓存: /// 区别于之前用字典或静态变量存储缓存,这里不同类型的“T”会被即时编译为不同的类型从而实现缓存 /// </summary> /// <typeparam name="T">缓存的数据类型 例如用户信息表实体:UserInfo</typeparam> public static class LisStaticCache<T> where T : class { /// <summary> /// 版本:可以从数据库的表或配置文件中读取,每次取值时查询是否更新缓存 /// </summary> private static string _version = string.Empty; /// <summary> /// 缓存:缓存的内容 /// </summary> private static List<T> _genericCache = null; /// <summary> /// 错误信息:保存缓存数据失败时的错误信息 /// </summary> private static string _errMsg = string.Empty; /// <summary> /// 数据库:该参数表所在的数据库名 /// </summary> private static string _database = string.Empty; /// <summary> /// 错误信息:保存缓存数据失败时的错误信息 /// </summary> public static string ErrMsg { get => _errMsg; set => _errMsg = value; } /// <summary> /// 读取缓存 /// </summary> private static void ReadData() { if (string.IsNullOrEmpty(_database)) { //从数据库或配置文件中对该类型所在数据库进行赋值 _database = ConfigurationManager.AppSettings.Get(typeof(T).Name); } //从数据库中读取数据并赋值给缓存 DataSet dataSet = DBHelper.SqlHelper(string.Format("select * from {0} where 1=1", typeof(T).Name), _database, ref _errMsg); if (dataSet != null && dataSet.Tables.Count > 0) { _genericCache = MapEntityHelper.MapEntityList<T>(dataSet.Tables[0]).ToList(); } } /// <summary> /// 获取缓存 /// </summary> /// <returns>缓存内容</returns> public static List<T> GetCache() { //判断缓存内容是否需要更新 缓存版本可以存储在数据库中或配置文件中 if (_genericCache == null || ConfigurationManager.AppSettings.Get(typeof(T).Name + ".Version") != _version) { ReadData(); } return _genericCache; } }
思路大概是这样,但是实际使用还需要针对使用场景进行优化。比如数据类型的版本信息,一般我是从数据库中单独创建的一个参数表读取的,而具体的版本是通过触发器在对应缓存表的数据增删改后让数据库自动更新。同时参数表还存储这个表所在的数据库,只有在参数表内记录了的数据表才能使用缓存等等。
阅读全文
0 0
- [代码积累]C#中泛型缓存的简单实现
- 简单的中文信息处理C#实现代码片段
- 简单缓存的实现
- 用简单的代码逻辑实现三级缓存图片
- C#项目代码积累
- c# 积累代码
- [代码积累]C#实现HexToString与StringToHex方法
- 最小二乘法C#实现,简单代码
- java缓存的简单实现
- Lru缓存的简单实现
- 简单的LRU缓存实现
- 简单的java缓存实现
- 简单的java缓存实现
- 缓存的简单实现例子
- 页面缓存的代码实现
- C#实现数据库事务处理的简单示例代码
- C#实现数据库事务处理的简单示例代码
- C#摄像头实现拍照功能的简单代码示例
- web项目部署到CentOs 7上运行
- 洛谷二分答案
- Spring Cloud 中文网
- Redis命令
- 2-1KNN算法
- [代码积累]C#中泛型缓存的简单实现
- linux挂载详解
- PyQt5笔记(06) -- 菜单
- linux lua编译
- Pyhon基础:Monkey Patch(猴子补丁)
- 事务及事务的特性
- BFS&Python
- KMP算法实现
- Java标识符的命名规则