自动生成缓存Key值的CacheKeyHelper
2017-10-10 09:46
363 查看
/// <summary> /// CacheKeyHelper /// </summary> public class CacheKeyHelper { /// <summary> /// 域名 /// </summary> const string DomainName = "App"; /// <summary> /// 当前类型 /// </summary> private static readonly Type CurrentType = typeof (CacheKeyHelper); /// <summary> /// 获取缓存Key /// </summary> /// <param name="detailCacheKey">PartialCacheKey</param> /// <returns></returns> public static string GetCacheKey(string detailCacheKey) { MethodBase mb = GetCaller(); if (mb != null && mb.DeclaringType != null) { return string.Format("{0}:{1}:{2}:{3}_{4}", DomainName, mb.DeclaringType.Namespace, mb.DeclaringType.Name, mb.Name, detailCacheKey.Md5()); } return string.Format("{0}_{1}", DomainName, detailCacheKey.Md5()); } /// <summary> /// 获取缓存Key /// </summary> /// <param name="reqObj">reqObj</param> /// <param name="properties">properties</param> /// <returns>PartialCacheKey</returns> public static string GetCacheKey<T>(T reqObj, IEnumerable<string> properties) where T : class { return GetCacheKey(string.Join("_", properties.Select(p => reqObj.GetPropertyValue(p, "null").ToString()))); } /// <summary> /// 获取缓存Key /// </summary> /// <param name="reqObj">reqObj</param> /// <returns>PartialCacheKey</returns> public static string GetCacheKey<T>(T reqObj) where T : class { return GetCacheKey(reqObj, typeof(T).GetProperties().Where(p => p.CanRead).Select(q => q.Name)); } /// <summary> /// 获得非本类的直接调用者 /// </summary> /// <returns></returns> private static MethodBase GetCaller() { var ss = new StackTrace(false); var currentClass = ss.GetFrame(0).GetMethod().DeclaringType; MethodBase mb = null; var level = 1; while (true) { //index:0为本身的方法;1为调用方法;2为其上上层,依次类推 mb = ss.GetFrame(level).GetMethod(); if (mb.DeclaringType == null) { break; } if (mb.DeclaringType != CurrentType) { break; } level++; } return mb; } }
相关文章推荐
- mybatis自动生成mapper中的insert与insertseletive,updateByPrimaryKey,updateByPrimaryKeySelective方法的区别
- Mybatis自动生成key值(selectKey和useGeneratedKeys)
- mybatis insert 自动生成key
- Spring @Cacheable 的key生成
- 理一理ehcache-spring-annotations缓存的Key生成
- Hibernate 关键字Key的自动生成
- Nginx配置proxy_cache后缓存不能生成缓存文件
- Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置
- Hibernate框架运行机制(增删改查,自动生成表,query接口,criteria接口,关系映射,缓存)
- mybatis自动生成mapper中的insert与insertseletive,updateByPrimaryKey,updateByPrimaryKeySelective方法的区别
- 企业库缓存类(EnterpriseLibrary CacheHelper )
- Glide使用高级技巧(解决Glide生成缓存Key问题)
- 一个小工具,用来自动清除Outlook 的地址自动完成缓存 (Outlook e-mail address auto complete cache)
- ibatis自动生成char(32)的key
- 对wordpress非插件生成html静态缓存教程的补充,自动更新缓存
- Asp.net Core CacheHelper 通用缓存帮助类
- mysql Key Cache(键高速缓存)
- 解决迅雷435自动生成vod_cache_data文件夹的补丁
- Procedure Helper (Microsoft Sql Server Procedure 自动生成工具)
- Mybatis-mybatis自动生成代码提示"Cannot obtain primary key information from ..."解决方案