/// <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. 面试题:String StringBufere StringBuilder 不用看

    一.String 使用 private final char value[]来实现字符串存储 所以String对象创建之后就不能再修改此对象中存储的字符串内容,所以说String本质是字符数组char ...

  2. hibernate使用记录

    1.执行SQL语句而非hql语句,getSession().createQuery(sql2) 执行的是hibernate语句; Query query2 = this.onlineMonitorDa ...

  3. Requests接口测试(五)

    使用python+requests编写接口测试用例 好了,有了前几章的的基础,写下来我把前面的基础整合一下,来一个实际的接口测试练习吧. 接口测试流程 1.拿到接口的URL地址 2.查看接口是用什么方 ...

  4. Requests接口测试(二)

    requests安装先看下怎么安装requests, 执行以下命令: pip install requests 安装好后如何导入requests模块呢? 如下所示: import requests 基 ...

  5. svn ank问题

    subvesion detected a working copy that need upgrade in 可以先在文件夹下cleapup,然后打开解决方案,在解决方案的右键选择upgrade wo ...

  6. 编写高质量代码改善C#程序的157个建议——建议50:在Dispose模式中应区别对待托管资源和非托管资源

    建议50:在Dispose模式中应区别对待托管资源和非托管资源 真正资源释放代码的那个虚方法是带一个bool参数的,带这个参数,是因为我们在资源释放时要区别对待托管资源和非托管资源. 提供给调用者调用 ...

  7. 注册 asp.net IIS

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319/aspnet_regiis.exe -i

  8. 【转】Android系统概览

    这篇文章其实原文叫 <老罗的Android之旅>导读PPT 是罗升阳的博客,我觉得用“Android系统概览”作为标题更贴切些,对于在应用层已经开发了一段时间的人来说,读完之后会有很多体会 ...

  9. laravel中chunk方法使用外部变量以及改变该变量

  10. iOS wkwebview https 加载不受信用的站点

    iOS 9.0以上直接设置WKNavigationDelegate代理 func webView(_ webView: WKWebView, didReceive challenge: URLAuth ...