- 浏览: 800905 次
- 性别:
- 来自: 淄博
文章分类
- 全部博客 (250)
- Hibernate (29)
- FCKEditor (5)
- Jstl (6)
- JavaScript (33)
- 异常备忘 (49)
- Mysql (1)
- XP小技巧 (8)
- Java基础 (48)
- Freemarker (6)
- Birt (5)
- SQL (22)
- Spring (13)
- XHTML+CSS (7)
- Struts (5)
- ExtJs (13)
- Tomcat (7)
- JFreeChart (1)
- Json-Lib (0)
- Jquery&EasyUI (22)
- MyEclipse (4)
- Firefox (1)
- Apache Shiro (1)
- Oracle (5)
- Spring Security (2)
- SQLServer (6)
- Bootstrap (1)
- POI (2)
- SpringMVC (4)
最新评论
-
xinglianxlxl:
对我有用,谢谢
Spring 定时任务之 @Scheduled cron表达式 -
cb_2017:
...
Spring 定时任务之 @Scheduled cron表达式 -
a251628111:
谢谢分享
Spring 定时任务之 @Scheduled cron表达式 -
hl174:
确实是这个问题 不知道谁把数据库改了
java.lang.IllegalArgumentException: Timestamp format must be yyyy-mm-dd hh:mm:ss -
gotosuzhou:
zhangzi 写道lylshr 写道顶,大哥你真强啊晕死,这 ...
数据库是SQLServer2008,出现'limit' 附近有语法错误
背景:
今晚遇到一个高手,高一开始编程,获得全国编程大赛三等奖,现在上大二,大部分是自学,因为是兴趣。好像是软件工程专业。最近刚发布了自己独立完成的论坛,用Java做的,说是自己写的框架 + Struts,论坛的亮点就是一个字——快,两个字——很快,三个字——相当快。采用的技术是全Model缓存+查询缓存,用的是淋漓尽致。在浏览的时候确实是很快。 (PS:这样的大学生少见啊!)
网址:http://www.smsj.net.cn/web/wzb32/java.html(网站已关2009-05-03)
服务器开启时间:10:00到23:00(挂在自己的电脑上的,好像是昨天晚上刚开通)
给了我个缓存模拟的小例子(其实缓存就是一个Map),确实挺好的
public class CacheDome { static Map cache = new HashMap(); //说白了缓存就是个map public static void main(String[] args) { User u1 = getUser(1); //u1是从数据库中取出来的 User u2 = getUser(1); //u2是从缓存中取出来的 User u3 = getUser(1); //u3也是从缓存中取出来的 updateUser(u1); User u4 = getUser(1); //u3是从数据库中取出来的 } public static User getUser(int id) { String key = User.class.getName() + id; User user = (User) cache.get(key); //从缓存中去取 if (user == null) { //如果缓存中没找到就从数据库中去取,然后再放入缓存中 user = getFormDB(); cache.put(key, user); } return user; } public static void updateUser(User user) { updateDB(user); //更新数据库 String key = User.class.getName() + user.getId(); cache.remove(key); //移除缓存中的User } }
我用到我的小例子上:ArticleDAOImpl.java
import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.demo.article.entity.Article; import com.demo.article.dao.ArticleDAO; public class ArticleDAOImpl extends HibernateDaoSupport implements ArticleDAO { private Map<String, Article> cacheArticle = new HashMap<String, Article>(); private Map<String, List<Article>> cacheArticles = new HashMap<String, List<Article>>(); /** * 增 * */ public void add(Article article) { getHibernateTemplate().save(article); String key = Article.class.getName() + "list"; cacheArticles.remove(key); //当添加一条记录时,要删除缓存(map),才能得到最新数据list } /** * 删 * */ public void delete(Integer id) { Article article = (Article) getHibernateTemplate().get(Article.class, id); if(article != null){ getHibernateTemplate().delete(article); String key = Article.class.getName() + "list"; cacheArticles.remove(key); //当删除一条记录时,要删除缓存(map),才能得到最新数据list } } /** * 修改 * */ public void update(Article article) { getHibernateTemplate().update(article); String key = Article.class.getName() + article.getId(); String key_list = Article.class.getName() + "list"; cacheArticle.remove(key); //删除缓存中的该条记录 cacheArticles.remove(key_list); //删除缓存中的list } /** * 根据ID得到该文章记录 * 注:经测试想要显示Acrticle的category对象一般是left join fetch a.category * 但是当web.xml中配置org.springframework.orm.hibernate3.support.OpenSessionInViewFilter * 就可以不用添加left了,但在本类中测试是错误的,在进行web浏览时正常显示 * */ /** * 查一条记录 **/ public Article findById(final Integer id) { String key = Article.class.getName() + id; Article article = cacheArticle.get(key); //从缓存中查找 if(article == null){ //缓存中没有就从数据库中查找 article = (Article) getHibernateTemplate().get(Article.class, id); cacheArticle.put(key, article); //存到缓存中 } return article; } /** * 查询全部 * */ @SuppressWarnings("unchecked") public List<Article> queryAll() { //和上面的一样 String key = Article.class.getName() + "list"; List<Article> articles = cacheArticles.get(key); if(articles == null){ articles = getHibernateTemplate().find("from Article"); cacheArticles.put(key, articles); } return articles; } //测试 public static ArticleDAOImpl getFromApplicationContext(ApplicationContext ctx) { return (ArticleDAOImpl) ctx.getBean("articleDAO"); } public static void main(String args[]){ @SuppressWarnings("unused") ArticleDAOImpl dao = getFromApplicationContext(new ClassPathXmlApplicationContext("spring/applicationContext.xml")); } }
评论
7 楼
konggang1988
2009-04-01
zhangzi 写道
konggang1988 写道
我怎么感觉只有查询的时候缓存有用,增删改看不出来 增删改后数据改变,是删除缓存的(如果缓存存在的话) 删除缓存是为了,在查询时得到最新数据(从数据库中查)。我只是演示了查询缓存。略知一二,共同交流!
哦,增删改只是为让查询出来的数据正确
6 楼
zhangzi
2009-03-31
konggang1988 写道
我怎么感觉只有查询的时候缓存有用,增删改看不出来
增删改后数据改变,是删除缓存的(如果缓存存在的话)
删除缓存是为了,在查询时得到最新数据(从数据库中查)。我只是演示了查询缓存。略知一二,共同交流!
5 楼
konggang1988
2009-03-30
我怎么感觉只有查询的时候缓存有用,增删改看不出来
4 楼
zhangzi
2009-03-21
heipn 写道
我不知道是否我没看懂,hiberate自带了缓存系统,也可以接第三方的缓存系统,再一个如何保证缓存中数据的线程安全? 不过学生能写这样还是很强,加油哦
Hibernate缓存是在一次请求中的,请求完后会清除,而这种的是第一次是从数据库中读取,以后都是从缓存中读取。
3 楼
heipn
2009-03-18
我不知道是否我没看懂,hiberate自带了缓存系统,也可以接第三方的缓存系统,再一个如何保证缓存中数据的线程安全?
不过学生能写这样还是很强,加油哦
不过学生能写这样还是很强,加油哦
2 楼
yananay
2009-03-18
这,这,,,,,,,,
1 楼
charles751
2009-03-18
一个学生能写出这样的代码,真是厉害,呵呵
发表评论
-
Hibernate SQL查询:No Dialect mapping for JDBC type: -9
2018-04-12 09:21 521Hibernate执行SQL语句遇到的错误,是数据类型异常 ... -
Encountered a duplicated sql alias [] during auto-discovery of a native-sql quer
2017-04-07 10:38 1721Encountered a duplicated sql a ... -
Hibernater由于外键设置不为空,导致在主键级联删除时失败解决办法!
2016-11-22 15:19 579媒体表 @Entity public class Me ... -
java数据类型,hibernate数据类型,标准sql数据类型之间的对应表
2016-09-09 08:14 656Hibernate API简 ... -
java.lang.NullPointerException: null
2015-11-03 08:24 15762015-11-03 08:14:54.332 [local ... -
出现“java.sql.SQLException: 无法转换为内部表示”解决方法
2015-09-25 09:52 2410出现“java.sql.SQLException: 无法转换 ... -
Hibernate中的对象状态,及自动更新原因
2015-02-26 15:33 492Hibernate的对象有三种状态,分别为:瞬时状态 (Tr ... -
Batch update returned unexpected row count from update [0]; actual row count: 0;
2015-01-16 10:54 715Batch update returned unexpec ... -
hibernate annotation 之 主键生成策略
2015-01-05 11:17 734Hibernate 默认总共支持 1 ... -
缓存简介--Cache In Hibernate
2013-02-19 14:02 1010缓存可以简单的看成一个 Map ,通过 key 在缓存里面找 ... -
hibernate4 分页报只进结果集不支持请求的操作的解决办法
2012-12-24 17:44 3336com.microsoft.sqlserver.jdbc.SQ ... -
Hibernate中的merge使用详情
2012-12-18 15:39 1082merge的作用是: 新new一个对象, 如果该对象设置了 ... -
should be mapped with insert="false"
2012-06-07 14:14 788org.hibernate.MappingException: ... -
java.lang.NoClassDefFoundError: javax/persistence/Access
2012-06-07 14:13 1490ejb3-persistence.jar中没有此类,需要hib ... -
exception is java.lang.NoSuchFieldError: INSTANCE
2012-06-07 14:11 9765org.springframework.beans.BeanI ... -
java.sql.SQLException: ORA-00904: "CHARINDEX": 标识符无效
2011-12-13 10:41 2909java.sql.SQLException: ORA-0090 ... -
关于Hibernate select count(*)返回值为Long还是Integer?
2011-07-20 09:00 2613java.lang.classcastexception ja ... -
hibernate的Criteria Query(转)
2010-12-03 10:43 1336当查询数据时,人们往往需要设置查询条件。在SQL或HQL语句中 ... -
hibernate.properties配置
2010-11-29 12:19 1574Hibernate配置属性 属性名 用 ... -
A ResourcePool could not acquire a resource from its primary factory or source
2010-11-09 08:42 4300启动tomcat的时候出现如下异常 com.mchange. ...
相关推荐
参考链接提供的CSDN博客文章《[Spring简单缓存实现](http://blog.csdn.net/maoyeqiu/article/details/50238035)》中,作者详细介绍了如何在Spring项目中实现缓存,包括配置、注解使用以及注意事项,是一个很好的学习...
在Go语言中,有许多库可以帮助开发者实现LRU缓存,其中"Go-一个简单高效用于go的LRU缓存包"就是一个这样的工具。这个包为Go程序员提供了简单、高效的LRU缓存接口,便于在应用程序中管理和优化数据存储。 在Go语言中...
第一个参数是缓存秒数,第二个参数是缓存路径,根据需要配置。 默认情况下,缓存时间是 3600 秒,缓存目录是 cache/ 3、读取缓存 $value = $cache->get('data_key'); 4、写入缓存 $value = $cache->put('data_key',...
要构建一个简单的文件缓存类,首先我们需要定义几个核心方法: 1. **`__construct()`**:构造函数,初始化类的属性,例如设置缓存目录、默认缓存有效期等。 2. **`get($key)`**:根据键获取缓存内容。首先检查文件...
以下是一个简单的示例,展示了如何在Java代码中使用Ehcache: ```java import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; public class JDBCEhcache { public static void main(String[] ...
缓存中的数据不是永久存储的,通常会有一个有效期,过了这个期限,数据就会被自动清除,以防止占用过多内存或保持数据的新鲜度。这里的时间Out参数表示缓存的超时时间,将其乘以1000是为了将秒转换为毫秒,因为Java...
创建一个简单的 MyBatis 示例,包括一级缓存和二级缓存的使用: 1. 定义实体类 `User` 和对应的 `UserMapper` 接口。 2. 编写 `UserMapper.xml` 映射文件,开启二级缓存配置。 3. 在 Service 层中调用 `UserMapper`...
Java缓存技术是提高应用程序性能的关键工具,尤其是在处理大量数据时。...这个“Java缓存技术的使用实例”提供了一个动手学习的机会,加深了对缓存工作原理的理解,并为实际开发中的缓存使用提供了参考。
"Carlos"是一个专门为Swift设计的缓存库,它提供了一个简单但功能强大的解决方案,允许开发者根据需求定制不同的缓存策略。本文将深入探讨Carlos库的核心特性、用法以及其在实际开发中的应用场景。 首先,Carlos的...
标题中的"Python-一个采用Python开发的简单缓存服务器"揭示了我们将探讨如何使用Python构建这样一个系统。 缓存服务器是提高应用性能的关键技术之一,它通过存储常用数据或计算结果,减少对原始数据源(如数据库或...
Go-kache是一个基于Go语言实现的轻量级内存缓存库,它的设计目标是提供一个简单易用且高效的缓存解决方案。在理解Go-kache的工作原理和应用之前,我们需要先了解缓存在计算机科学中的基本概念。 缓存是一种存储技术...
下面是一个简单的C#内存缓存小程序,展示了如何插入、获取和移除缓存项: ```csharp using System.Runtime.Caching; class Program { static void Main() { var cache = MemoryCache.Default; // 插入缓存 ...
在上述描述的面试场景中,Programmer One 使用哈希表实现了一个简单的缓存,但并未考虑到缓存的扩展性和管理策略。缓存的容量并非无限,因此当达到其最大容量时,必须采取一定的策略来决定哪些数据应该被移除以腾出...
- **缓存策略选择**:根据业务需求选择合适的缓存系统,如简单缓存场景可选用Memcached,复杂数据结构或需持久化的场景则考虑Redis。 - **缓存失效策略**:除了LRU外,还可以采用Time-To-Live(TTL)、手动清除等方式...
本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL映射文件中应用这些缓存设置。 #### 一、缓存的基本概念 缓存是存储数据的一种临时区域,目的是减少重复查询数据库...
总之,ASimpleCache是一个为Java开发设计的简易缓存框架,通过其提供的API和示例代码,开发者可以方便地在自己的项目中实现高效的缓存功能。同时,通过深入学习源码,还能了解到更多关于缓存系统设计和实现的技巧,...
当前有四个实现,RedisCache、TairCache、CaffeineCache和一个简易的LinkedHashMapCache,要添加新的实现也是非常简单。它的特性: 通过统一的API访问Cache系统 通过注解实现声明式的方法缓存 通过注解创建并配置...
缓存刷新策略是缓存使用场景中的一个重要概念。被动刷新是比较常用的刷新方式,存入缓存的数据会被设置一个过期时间。查询请求进来时,当缓存中有数据时则从缓存取,缓存中没有数据时,则从数据库查询数据,并更新至...
在.NET Framework中,WinForm应用程序通常使用C#来开发,而缓存机制是提升应用程序性能的一个重要手段。本文将深入探讨如何在WinForm应用中实现一个简单的缓存类,主要基于System.Web.Caching命名空间中的Cache对象...
解决缓存穿透可使用布隆过滤器,将所有可能存在的数据哈希到一个位图中,无效的查询会被拦截;另一种简单方法是将空结果也缓存,但设置较短的过期时间。 3. **缓存预热** 缓存预热是在系统上线前或重启后,提前...