/// <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().GetMethod().DeclaringType;
MethodBase mb = null;
var level = ;
while (true)
{
//index:0为本身的方法;1为调用方法;2为其上上层,依次类推
mb = ss.GetFrame(level).GetMethod();
if (mb.DeclaringType == null)
{
break;
} if (mb.DeclaringType != CurrentType)
{
break;
} level++;
} return mb;
}
}

自动生成缓存Key值的CacheKeyHelper的更多相关文章

  1. DAO以及获取自动生成主键值

    package com.alibaba.sql; import java.lang.reflect.InvocationTargetException; import java.sql.Connect ...

  2. JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率

    大家好,又见面了. 在JAVA做前后端分离的项目开发的时候,服务端需要提供接口文档供周边人员做接口的对接指导.越来越多的项目都在尝试使用一些基于代码自动生成接口文档的工具来替代由开发人员手动编写接口文 ...

  3. JavaWeb学习记录(二十四)——获取插入数据后,自动生成的id值

    public Integer insertObjects(final Goods entity) { // 定义sql语句        final String sql1 = "inser ...

  4. Vertica系列: 自动生成Identity 字段值的方法

    参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/ 在 vertica 中有三种定义 identity 字段的方 ...

  5. 【转】Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码

    Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中 ...

  6. idea使用generator自动生成model、mapper、mapper.xml(转)

    原文链接:http://www.mamicode.com/info-detail-445217.html TEP 0.在Intellij IDEA创建maven项目(本过程比较简单,略) STEP 1 ...

  7. IDEA 中使用MyBatis-generator 自动生成MyBatis代码

    0.在Intellij IDEA创建maven项目 1. 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件 <build> < ...

  8. MyBatis Generator 自动生成的POJO对象的使用(一)

    MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境): Java Model Objects(总是生成) SQL Map Fi ...

  9. DB2_自动生成值

    生成数字序列的两种方法 在 DB2 中可以用两种方法自动生成一个数字序列: 定义带有 IDENTITY 属性的列. 创建 SEQUENCE 对象. IDENTITY 列 当用 IDENTITY 属性定 ...

随机推荐

  1. Intent对象若干数据项的含义总结

    Intent作为组件之间通信的手段和协议,包含了诸如Action.Data.Type.Category.Component.Extras和Flags等数据项,各自拥有各自的含义和作用.当调用组件发出一 ...

  2. c语言实战 BJT时间转化位UTC时间

    题目是这样的: 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果小时小 ...

  3. Ubuntu 12.04 LTS 中文输入法的安装 (转载)

    第一步:安装语言包 进入 “System Settings” 找到 “Language Support” 那一项,点击进入 选择 “Install/Remove Languages” 找到 “Chin ...

  4. 【Web API2】ASP.NET Web API Security

    实现安全的方式既可以是host提供,也可以框架提供. 1,HTTP Module 方式,工作在IIS上,所以web api要托管在IIS上才行.其作用于HTTP管道的最前端,所以这种方式影响的是全局, ...

  5. js Date 生成某年某月的天数

    $(function () { //构造一个日期对象: var day = new Date(2014, 2, 0); //获取天数: var daycount = day.getDate(); al ...

  6. HackSeven Canvas上的动画

    当自定义View的时候,可以利用Canvas给View添加一些动画效果. 下面的例子,是在屏幕上绘制一个红色的小方块,这个小方块会在屏幕上面“乱跳”. 知识点 使用到的知识点: (1) 在View的子 ...

  7. 关于对SwfUpload的改造

    Swfupload 在普通上传下,对于IE chrome firefox等有很好的兼容性. 但一旦与其他控件组合,很容易出现无法上传,帮顶事件丢失的情况. 例如Layer与Swfupload,上传一个 ...

  8. Microsoft.Office.Interop.Word.DocumentClass.SaveAs 命令失败

    asp.net 常用的生成word功能,代码也是网上常见的,自己本地反复测试过没问题.serves 2003下运行没问题,可是发布到2008上就出错.组件权限已配置,windows目录下temp权限已 ...

  9. 「BZOJ 3218」 a + b Problem

    题目链接 戳我 \(Solution\) 题目为什么是\(a\ +\ b\ Problem\)啊?这和题面半毛钱关系都没有. 现在来讲一下这题的解法吧,我们首先看看没有奇怪的方格这一个条件吧. 其实没 ...

  10. 在构造函数和析构函数中调用虚函数------新标准c++程序设计

    在构造函数和析构函数中调用虚函数不是多态,因为编译时即可确定调用的是哪个函数.如果本类有该函数,调用的就是本类的函数:如果本类没有,调用的就是直接基类的函数:如果基类没有,调用的就是间接基类的函数,以 ...