C#中Helper类如何使用
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本文小编为大家详细介绍"C#中Helper类如何使用",内容详细,步骤清晰,细节处理妥当,希望这篇"C#中Helper类如何使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
千家信息网最后更新 2025年01月20日C#中Helper类如何使用
本文小编为大家详细介绍"C#中Helper类如何使用",内容详细,步骤清晰,细节处理妥当,希望这篇"C#中Helper类如何使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
使用背景
项目中用户频繁访问数据库会导致程序的卡顿,甚至堵塞。使用缓存可以有效的降低用户访问数据库的频次,有效的减少并发的压力。保护后端真实的服务器。
对于开发人员需要方便调用,所以本文提供了helper类对缓存有了封装。分了三个Cache,SystemCache,RedisCache(默认缓存,系统缓存,Redis缓存)。话不多说,开撸!
使用方法
1.引用CSRedisCore
可以看到,csredis支持.net40/.net45/.netstandard平台,还是比较友好的。
2.增加helper类代码
CacheHelper.cs
////// 缓存帮助类 /// public class CacheHelper { ////// 静态构造函数,初始化缓存类型 /// static CacheHelper() { SystemCache = new SystemCache(); if(true) //项目全局变量类,可自行定义 // if (GlobalSwitch.OpenRedisCache) { try { RedisCache = new RedisCache(GlobalSwitch.RedisConfig); } catch { } } switch (GlobalSwitch.CacheType) { case CacheType.SystemCache:Cache = SystemCache;break; case CacheType.RedisCache:Cache = RedisCache;break; default:throw new Exception("请指定缓存类型!"); } } ////// 默认缓存 /// public static ICache Cache { get; } ////// 系统缓存 /// public static ICache SystemCache { get; } ////// Redis缓存 /// public static ICache RedisCache { get; } }
ICache.cs
////// 缓存操作接口类 /// public interface ICache { #region 设置缓存 ////// 设置缓存 /// /// 主键 /// 值 void SetCache(string key, object value); ////// 设置缓存 /// 注:默认过期类型为绝对过期 /// /// 主键 /// 值 /// 过期时间间隔 void SetCache(string key, object value, TimeSpan timeout); ////// 设置缓存 /// 注:默认过期类型为绝对过期 /// /// 主键 /// 值 /// 过期时间间隔 /// 过期类型 void SetCache(string key, object value, TimeSpan timeout, ExpireType expireType); ////// 设置键失效时间 /// /// 键值 /// 从现在起时间间隔 void SetKeyExpire(string key, TimeSpan expire); #endregion #region 获取缓存 ////// 获取缓存 /// /// 主键 object GetCache(string key); ////// 获取缓存 /// /// 主键 ///数据类型 T GetCache(string key) where T : class; /// /// 是否存在键值 /// /// 主键 ///bool ContainsKey(string key); #endregion #region 删除缓存 /// /// 清除缓存 /// /// 主键 void RemoveCache(string key); #endregion } #region 类型定义 ////// 值信息 /// public struct ValueInfoEntry { public string Value { get; set; } public string TypeName { get; set; } public TimeSpan? ExpireTime { get; set; } public ExpireType? ExpireType { get; set; } } ////// 过期类型 /// public enum ExpireType { ////// 绝对过期 /// 注:即自创建一段时间后就过期 /// Absolute, ////// 相对过期 /// 注:即该键未被访问后一段时间后过期,若此键一直被访问则过期时间自动延长 /// Relative, } #endregion
RedisCache.cs
////// Redis缓存 /// public class RedisCache : ICache { ////// 构造函数 /// 注意:请以单例使用 /// /// 配置字符串 public RedisCache(string config) { _redisCLient = new CSRedisClient(config); } private CSRedisClient _redisCLient { get; } public bool ContainsKey(string key) { return _redisCLient.Exists(key); } public object GetCache(string key) { object value = null; var redisValue = _redisCLient.Get(key); if (redisValue.IsNullOrEmpty()) return null; ValueInfoEntry valueEntry = redisValue.ToString().ToObject(); if (valueEntry.TypeName == typeof(string).AssemblyQualifiedName) value = valueEntry.Value; else value = valueEntry.Value.ToObject(Type.GetType(valueEntry.TypeName)); if (valueEntry.ExpireTime != null && valueEntry.ExpireType == ExpireType.Relative) SetKeyExpire(key, valueEntry.ExpireTime.Value); return value; } public T GetCache (string key) where T : class { return (T)GetCache(key); } public void SetKeyExpire(string key, TimeSpan expire) { _redisCLient.Expire(key, expire); } public void RemoveCache(string key) { _redisCLient.Del(key); } public void SetCache(string key, object value) { _SetCache(key, value, null, null); } public void SetCache(string key, object value, TimeSpan timeout) { _SetCache(key, value, timeout, ExpireType.Absolute); } public void SetCache(string key, object value, TimeSpan timeout, ExpireType expireType) { _SetCache(key, value, timeout, expireType); } private void _SetCache(string key, object value, TimeSpan? timeout, ExpireType? expireType) { string jsonStr = string.Empty; if (value is string) jsonStr = value as string; else jsonStr = value.ToJson(); ValueInfoEntry entry = new ValueInfoEntry { Value = jsonStr, TypeName = value.GetType().AssemblyQualifiedName, ExpireTime = timeout, ExpireType = expireType }; string theValue = entry.ToJson(); if (timeout == null) _redisCLient.Set(key, theValue); else _redisCLient.Set(key, theValue, (int)timeout.Value.TotalSeconds); } }
SystemCache.cs
////// 系统缓存帮助类 /// public class SystemCache : ICache { public object GetCache(string key) { return HttpRuntime.Cache[key]; } public T GetCache(string key) where T : class { return (T)HttpRuntime.Cache[key]; } public bool ContainsKey(string key) { return GetCache(key) != null; } public void RemoveCache(string key) { HttpRuntime.Cache.Remove(key); } public void SetKeyExpire(string key, TimeSpan expire) { object value = GetCache(key); SetCache(key, value, expire); } public void SetCache(string key, object value) { _SetCache(key, value, null, null); } public void SetCache(string key, object value, TimeSpan timeout) { _SetCache(key, value, timeout, ExpireType.Absolute); } public void SetCache(string key, object value, TimeSpan timeout, ExpireType expireType) { _SetCache(key, value, timeout, expireType); } private void _SetCache(string key, object value, TimeSpan? timeout, ExpireType? expireType) { if (timeout == null) HttpRuntime.Cache[key] = value; else { if (expireType == ExpireType.Absolute) { DateTime endTime = DateTime.Now.AddTicks(timeout.Value.Ticks); HttpRuntime.Cache.Insert(key, value, null, endTime, Cache.NoSlidingExpiration); } else { HttpRuntime.Cache.Insert(key, value, null, Cache.NoAbsoluteExpiration, timeout.Value); } } } }
3.使用
4.说明
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
它是基于高性能的Key-Value、并提供多种语言的 API的非关系型数据库。不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快。
它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)
读到这里,这篇"C#中Helper类如何使用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
缓存
数据
类型
时间
数据库
系统
C#
文章
帮助
有效
内存
内容
函数
多种
字符
字符串
数据结构
用户
结构
项目
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
15派网络安全
v-soc网络安全
服务器集群
哪些是网络安全防护措施
重庆物流软件开发平台
计算机网络技术阶段
网络安全考研院校成都
恒深创天网络技术
科大讯飞软件开发薪水
中国网络安全lunwen
简单 软件开发合同模板
高速公路收费网络授权服务器
rust架设服务器教程
服务器新建文件夹
榆林网络技术要多少钱
收短信违反学校网络安全
软件开发尽量使用什么语言
数据库实验基本表的建立
数据库源程序
南京银行软件开发岗年终奖
java 动态链接数据库
外包软件开发质量把关
成都工控软件开发定制
新建数据库没有权限
上海工控软件开发价位
数据库日志开启与关闭
网络安全资产分配台帐
日常数据库支持的应用
云南省教育厅网络安全宣传周
数据库里没有数据库快照