自动生成缓存Key值的CacheKeyHelper
/// <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的更多相关文章
- DAO以及获取自动生成主键值
package com.alibaba.sql; import java.lang.reflect.InvocationTargetException; import java.sql.Connect ...
- JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率
大家好,又见面了. 在JAVA做前后端分离的项目开发的时候,服务端需要提供接口文档供周边人员做接口的对接指导.越来越多的项目都在尝试使用一些基于代码自动生成接口文档的工具来替代由开发人员手动编写接口文 ...
- JavaWeb学习记录(二十四)——获取插入数据后,自动生成的id值
public Integer insertObjects(final Goods entity) { // 定义sql语句 final String sql1 = "inser ...
- Vertica系列: 自动生成Identity 字段值的方法
参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/ 在 vertica 中有三种定义 identity 字段的方 ...
- 【转】Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中 ...
- idea使用generator自动生成model、mapper、mapper.xml(转)
原文链接:http://www.mamicode.com/info-detail-445217.html TEP 0.在Intellij IDEA创建maven项目(本过程比较简单,略) STEP 1 ...
- IDEA 中使用MyBatis-generator 自动生成MyBatis代码
0.在Intellij IDEA创建maven项目 1. 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件 <build> < ...
- MyBatis Generator 自动生成的POJO对象的使用(一)
MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境): Java Model Objects(总是生成) SQL Map Fi ...
- DB2_自动生成值
生成数字序列的两种方法 在 DB2 中可以用两种方法自动生成一个数字序列: 定义带有 IDENTITY 属性的列. 创建 SEQUENCE 对象. IDENTITY 列 当用 IDENTITY 属性定 ...
随机推荐
- SqlServer——神奇代码1之Update
说明:一个带有update的循环的代码.很简单,但是在QQ群里问了,应该说是很少有人注意这个问题,也就是很少有人真的理解SQL中的Update. 代码如下: if object_id('tempdb. ...
- Service和IntentService的区别
不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentService,前段时间准备面试的时候看到了一篇关于IntentServic ...
- jQuery基础教程-第8章-001Adding new global functions
一. 1.To add a function to the jQuery namespace, we can just assign the new function asa property of ...
- Mathematical optimization数学上的最优化
https://en.wikipedia.org/wiki/Mathematical_optimization In mathematics, computer science and operati ...
- 献上一款漂亮的手写PHP验证码
献上一款漂亮的PHP验证码,可以根据个人需求作调整,代码如下(审美观不同,欢迎吐槽): <?php /** * Author: xiongwei * Email: 695704253@qq.co ...
- [转]xe6 android 使用距离传感器(Proximiry)
The first step it's a run sample from RAD Studio that named SensorInfo on your device. On the tab Bi ...
- .net Stream篇(六)
BufferedStream 目录: 简单介绍一下BufferedStream 如何理解缓冲区? BufferedStream的优势 从BufferedStream 中学习装饰模式 如何理解装饰模式 ...
- HTML5+CSS3从入门到精通 中文pdf版
HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指南.高级程序设计.开发指南同类图书,本书是一本适合快速入手的 ...
- 2014-4-2解决无法访问github和google的问题
github是个好地方,但是上不去就蛋疼了. 今天github上不去,果断f12下,看下network,发现里面好多请求都是指向 github.global.ssl.fastly.net这个域名的,然 ...
- linux学习之路(4)
用户身份与文件权限 通过uid来区分: 管理员 UID 为 0:系统的管理员用户. 系统用户 UID 为 1-999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提 权至整台服务器,默认 ...