相对查询结果进行缓存,查询的条件封装在一个Query对象里面,查询结果最后是一个JSON字符串,Query对象不是null的属性作为查询条件,希望能根据Query对象不同的属性生成key.
请问有什么高效的方法或者工具类吗?
1. 可考虑做2级缓存,一级使用ehcache(hibernate/mybatis可集成),看并发量较大集群机器多再考虑二级redis。
2. Query对象中的查询条件是否都是字符串?如果是整型可使用hashCode,如果是大量字符串,使用这些字符串的消息摘要,看查询条件的组合数如何,可以使用MD5之类算法,如果考虑到组合数很少,可裁剪比如只取20位等, 因为KEY不宜过长,JSON如果很短可直接保存,如果很大可考虑google protobuf, kryo等耗费空间较少,序列化与反序列化性能较高的工具。思路大概如此。
自定义注解 + aop + SpelExpressionParser
相同的query,我一般是映射成map,然后对key字典排序,再把它做一个md5
md5有极小的重复概率,你可以把方法名什么的拼到前面去作key,这样可以降低重复的概率
如果有用户账户体系,可以把用户的唯一标识。
具体的你可以根据自己需要的维度去决定key该长怎样,不建议使用param的原文,redis的key超过256还是255长度,会对性能有影响
来来来
1. 可考虑做2级缓存,一级使用ehcache(hibernate/mybatis可集成),看并发量较大集群机器多再考虑二级redis。
2. Query对象中的查询条件是否都是字符串?如果是整型可使用hashCode,如果是大量字符串,使用这些字符串的消息摘要,看查询条件的组合数如何,可以使用MD5之类算法,如果考虑到组合数很少,可裁剪比如只取20位等, 因为KEY不宜过长,JSON如果很短可直接保存,如果很大可考虑google protobuf, kryo等耗费空间较少,序列化与反序列化性能较高的工具。思路大概如此。
自定义注解 + aop + SpelExpressionParser
相同的query,我一般是映射成map,然后对key字典排序,再把它做一个md5
md5有极小的重复概率,你可以把方法名什么的拼到前面去作key,这样可以降低重复的概率
如果有用户账户体系,可以把用户的唯一标识。
具体的你可以根据自己需要的维度去决定key该长怎样,不建议使用param的原文,redis的key超过256还是255长度,会对性能有影响
来来来