介绍

我们经常有这种需求:当我们把memcached增加到项目后我还还要写一个 cacheUtils 或者 cacheManager 之类的类来操作memcached。

而且一般的操作不外乎是这种操作:

  1. 拿到一段sql,先去memcahed里面看下是否有缓存,假设有就直接返回结果
  2. 假设没有就直接查询数据库
  3. 查到数据之后先保存到memcached里面再返回给上层调用者

这样的需求基本上占了缓存操作的大部分情况。这三件事情写起来非常easy,事实上还是有一些代码量的。cached-query 是一个轻量级的类库,帮你做了以上三件事情,而且仅仅提供一个方法就是通过sql查询得出一个列表。

安装

加入依赖到 pom.xml

<dependency>
<groupId>org.crazycake</groupId>
<artifactId>cached-query</artifactId>
<version>1.0.0-RELEASE</version>
</dependency>

用法

建立一个配置文件 cached-query.properties  在classpath跟文件夹下,你能够放到 src/resources 下

#cache type. [memcached]
cache.type=memcached
cache.host=127.0.0.1
cache.port=11211
cache.expire=1800

建立你要查询的表相应的model

public class Student implements Serializable{
private Integer studentId;
private String studentName;
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
} }

在你的代码中使用它

CachedQuery q = CachedQuery.getInstance();
String sql="select student_id,student_name from student where student_id=? ";
Object[] params = new Object[]{1};
ArrayList<Student> list = q.queryList(sql, params, conn, Student.class);

注意事项

  • 要查询并被实例化的类一定要实现Serializable接口
  • 实例化的类里面属性的名字要取跟数据库里面字段相应的驼峰式命名。比方数据库中的字段是 student_name 相应的属性就是 studentName
  • 类的属性不能用基本类型。int要用Integer,float用Float,其它依次类推,事实上这样开发人员养成一个好习惯也是非常好的

最新版本号情况參考 https://github.com/alexxiyang/cached-query


cached-query 将缓存和查询数据库高速连接起来的轻类库的更多相关文章

  1. DQL:data query language用来查询数据库表中的数据

    对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 如果没有查询条件,则每次查询所有的行.实际应用中,一般要指定查询的条件.对记录进行过滤. 查询 ...

  2. php mysqli query 查询数据库后读取内容的方法

    php mysqli query 查询数据库后读取内容的方法 <?php$mysqli = new mysqli("localhost", "my_user&quo ...

  3. 通过redash query results 数据源实现跨数据库的查询

    redash 提供了一个简单的 query results 可以帮助我们进行跨数据源的查询处理 底层数据的存储是基于sqlite的,期望后期有调整(毕竟处理能力有限),同时 query results ...

  4. MyBatis 强大之处 多环境 多数据源 ResultMap 的设计思想是 缓存算法 跨数据库 spring boot rest api mybaits limit 传参

    总结: 1.mybaits配置工2方面: i行为配置,如数据源的实现是否利用池pool的概念(POOLED – This implementation of DataSource pools JDBC ...

  5. [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. Django Cache缓存系统学习--数据库缓存

    Django是动态网站,用户每一次请求页面,服务器都会执行以下操作:数据库查询.渲染模版.执行业务逻辑,最后生成用户可查看的页面.当访问量比较大的时候,会消耗掉大量的资源,这时候就会考虑到缓存问题. ...

  7. java框架之Hibernate(2)-持久化类&主键生成策略&缓存&事务&查询

    持久化类 概述 持久化:将内存中的对象持久化到数据库中的过程就是持久化.Hibernate 就是用来进行持久化的框架. 持久化类:一个 Java 对象与数据库的表建立了映射关系,那么这个类在 Hibe ...

  8. Hibernate一级缓存、二级缓存以及查询缓存的关系

    转载自http://blog.csdn.net/maoyeqiu/article/details/50209893 前两天总结了一下二级缓存和查询缓存的关系,但是又有一个新的问题,就是查询缓存缓存到二 ...

  9. Hibernate中 一 二级缓存及查询缓存(2)

    缓存:缓存是什么,解决什么问题?  位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为缓存Cache.缓存目的:让数据更接近于应用程序,协调速度不匹配,使访问速度更 ...

随机推荐

  1. CentOS 6.3下NFS安装配置

    CentOS 6.3下NFS安装配置 一.环境介绍   NFS服务器:CentOS6.3 192.168.8.20 NFS客户端:CentOS6.5 192.168.8.39 二.服务器端安装配置   ...

  2. 转载:Java的四种引用方式

    原文:https://www.cnblogs.com/huajiezh/p/5835618.html Java内存管理分为内存分配和内存回收,都不需要程序员负责,垃圾回收的机制主要是看对象是否有引用指 ...

  3. Eureka 开发时快速剔除失效服务

    Spring Cloud 版本: Dalston.SR5 服务端配置: # 关闭保护机制 eureka.server.enable-self-preservation=false #剔除失效服务间隔 ...

  4. Android service与Thread

    很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thre ...

  5. [译]bootstrap-select (selectpicker)方法

    方法 .selectpicker('val') 您可以通过调用val元素上的方法来设置所选值. $('.selectpicker').selectpicker('val', 'Mustard'); $ ...

  6. winform(记事本--剪切复制等和打开)

  7. strchr()的用法

    strchr()主要有2个最有用的用法: 第一个:搜索字符串在另一字符串中的第一次出现.并返回剩余的部分 $str = "hello_chrdai_1993"; $not_incl ...

  8. python3 + selenium 之警告和弹窗

    获取警告框信息 texts = driver.switch_to_alert().text #获取警告文本 print(texts)#得到弹窗的文本消息,比如得到:请输入用户名! 使用switch_t ...

  9. JavaScript错误:Maximum call stack size exceeded错误

    错误的表面意思是,因为递归次数太多而内存溢出, 当然引起溢出的原因很多 找了下问题来源,发现引用了两个版本的jquery,在layout.cshtml母模块页中和视图中都引用了jq.导致循环调用,从而 ...

  10. 【C++ Primer 第10章】 10.4.1 插入迭代器

    目录 •  iostream迭代器 •  反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素. 头文件为:#include<iterator it=t 在it指 ...