此前一直不知道缓存的具体实现,只知道是把数据存储在内存中,以便下次直接从内存中读取。对于缓存的使用也没有概念,觉得缓存技术是一个比较”神秘陌生“的领域。但最近要用到缓存技术,发现还是很有必要一探究竟的。
缓存技术使用背景:一般来说,对于web项目,如果我们要什么数据直接jdbc查库好了,但是在遇到高并发的情形下,不可能每一次都是去查数据库,因为这样在高并发的情形下显得不太合理——频繁地与数据库交互不是件好事儿,除了在并发情况不是很多的情况下或者没有并发的情况下。我们可以找到一个解决方案:那就是第一次去查库,把查询到的数据缓存到内存中(用key来指定该数据),下次再到这一步时,判断查询条件是不是一样,一样的话,直接从内存中取;不一样则去查库,并把结果缓存起来以便下次使用……
这样做的好处,就是减少了与数据库的交互。。
开始使用oscahe缓存技术来探讨吧。这里我用到了oscache.jar包,反编译该jar,找到一个缓存管理的核心类GeneralCacheAdministrator.java,这个类负责创建、销毁、操作缓存Cache对象。这个类extends了一个基类AbstractCacheAdministrator,这个基类有以下一些基本属性:
// 缓存的内存 public static final String CACHE_MEMORY_KEY = "cache.memory"; // 缓存容量(可以容纳的key-value对数) public static final String CACHE_CAPACITY_KEY = "cache.capacity"; //缓存的算法 public static final String CACHE_ALGORITHM_KEY = "cache.algorithm";
看到GeneralCacheAdministrator类里面有些关键的方法:
//得到缓存 public Cache getCache() { return this.applicationCache; } //从缓存中删除内容 public void removeEntry(String key) { getCache().removeEntry(key); } //从缓存中得到内容 public Object getFromCache(String key) throws NeedsRefreshException { return getCache().getFromCache(key); //取消缓存的更新 public void cancelUpdate(String key) { getCache().cancelUpdate(key); } //刷新缓存 public void flushEntry(String key) { getCache().flushEntry(key); } //刷新某组缓存 public void flushGroup(String group) { getCache().flushGroup(group); }
……
还有很多方法,只不过这几个方法用得比较普遍,从代码来看也比较好理解它们的作用。
如何在项目中使用oscahe缓存?
为了能够在web项目中更好地使用oscahe,首先配置是必不可少的:
进一步看GeneralCacheAdministrator.java类的构造方法:
private Cache applicationCache = null;
public GeneralCacheAdministrator()
{
this(null);
}
public GeneralCacheAdministrator(Properties p)
{
super(p);
log.info("Constructed GeneralCacheAdministrator()");
createCache();
}
public Cache getCache()
{
return this.applicationCache;
}
private void createCache()
{
log.info("Creating new cache");
this.applicationCache = new Cache(isMemoryCaching(), isUnlimitedDiskCache(), isOverflowPersistence(), isBlocking(), this.algorithmClass, this.cacheCapacity);
configureStandardListeners(this.applicationCache);
}
我们肯定选带参数的构造了,因为要指定一些必要的属性。。而通过createCache()方法可知,要构建一个缓存对象,可指定一些基本的属性。
<bean id="sysCacheOscache" class="com.opensymphony.oscache.general.GeneralCacheAdministrator" scope="singleton" destroy-method="destroy"> <constructor-arg index="0"> <props> <prop key="cache.memory">true</prop> <prop key="cache.capacity">600</prop><!-- 缓存元素个数最大值 --> <!-- 缓存元素超过最大值,采用先进先出(first int first out)算法移除 --> <prop key="cache.algorithm">com.opensymphony.oscache.base.algorithm.FIFOCache </prop> </props> </constructor-arg> </bean>
注意:
1)数据库数据更新时,别忘了调用flush缓存的方法;
2)缓存的key设置问题:
——当你需要得到一个集合时,缓存的key可用常量表示(select * from);
——当你根据不同的条件去数据库查到结果不一样时(select xxx, xx, xx… from xx where …),需要注意key不能用常量固定死,否则当你第一次查库时,会把结果缓存到内存中,而当你查询条件变化后,本来结果应该改变(重新查库。。,此时数据结构为查询结果为map,查询条件的组合为key)
3)不要忘记数据库数据改变时,缓存也需要调用flushEntry刷新缓存中的内容,避免缓存中的内容没有及时跟数据同步。调用之后,它会重新查库,把新的结果保存在缓存中。
相关推荐
这个技术使得用户可以与网页进行更流畅的交互,提高了用户体验。本学习实例集主要涵盖了AJAX与数据库交互的各种应用,包括数据的增删改查、异步提交等常见操作,提供了丰富的实践案例。 一、AJAX基础 1. ...
InTouch与关系数据库的数据交互 ...本文档详细介绍了InTouch软件如何与关系数据库进行数据交互,包括如何读取和写入关系数据库数据,并提供了相关的技术信息和步骤,供中国地区的分销商、系统集成商和最终用户参考。
一款仿商城的javaweb项目,可以与后台数据库交互,后台数据库为mysql一款仿商城的javaweb项目,可以与后台数据库交互,后台数据库为mysql一款仿商城的javaweb项目,可以与后台数据库交互,后台数据库为mysql一款仿...
本文将深入探讨如何使用***技术与SQL数据库进行有效的数据交互,以及在这个过程中需要注意的一些技巧。 首先,我们需要了解***。***是微软推出的一个用于Web开发的框架,它允许开发者创建动态网页和网络应用程序。*...
3. **数据库交互**:使用MySQL数据库进行数据存储,C#后端通过ADO.NET或其他ORM框架与数据库进行连接和通信。 理解这些核心概念和技术,对于开发一个完整的Web应用程序至关重要。无论是前端的用户交互,还是后端的...
- **数据缓存**:对于频繁访问的数据,可以暂存于本地,减少网络请求,提升用户体验。 6. **安全考虑**: - **数据加密**:敏感信息如用户密码,应进行加密存储。 - **防止SQL注入**:对用户输入进行过滤和转义...
Fortran语言以其在科学和数值计算中的卓越性能而闻名,但现代应用往往需要与数据库进行交互,以处理和分析大量数据。虽然Fortran不像某些现代编程语言那样直接支持数据库操作,但通过各种库和接口,Fortran程序可以...
在这个"Shiro与数据库交互的实例"中,我们将深入探讨如何利用Shiro进行权限管理和用户认证,并结合数据库实现这一过程。 首先,Shiro的核心组件包括Subject、Realms、Caches、Filters等。Subject是Shiro的中心概念...
boa网页读取数据库数据能实现保存 通过前台读取后台数据库的值来确定前台上的控件的状态,实现保存网页设置的功能 boa ajax send传参 通过ajax传参将前台的页面数据传递到后台的数据库中(此处的数据库是sqlite3...
ASP缓存技术详解深入介绍了ASP(Active Server Pages)中的缓存机制,这是ASP开发中用于提高网站性能、减少数据库访问次数和优化用户体验的重要技术。文中主要讨论了缓存技术的必要性、ASP缓存的分类、实现和使用...
"交互式Web开发技术PHP与Oracle数据库...本文档介绍了交互式Web开发技术PHP与Oracle数据库访问的相关知识点,旨在帮助读者了解PHP的功能特点、与其他交互式Web开发技术的比较、使用PHP访问Oracle数据库的方法和优点。
而PHP(Hypertext Preprocessor)是后端编程语言,用于处理用户提交的数据,与数据库进行交互。在这个项目中,PHP接收来自JavaScript的Ajax请求,验证用户输入,然后将数据存储到数据库。通常会使用诸如MySQL这样的...
Java端接收到这个请求后,可以使用Java的 JDBC(Java Database Connectivity)API与数据库交互,将消息存储到数据库中。 数据库连接是Java后端的重要部分。为了与数据库进行通信,开发者通常会使用诸如MySQL、...
ESI技术允许缓存动态内容的部分片段,而这些片段可由服务器动态生成,并与其他缓存片段组合成最终页面。 三、数据缓存 数据缓存是将数据库查询结果存储在缓存中,在需要时直接从缓存读取数据,避免重复访问数据库。...
- **事务管理**:优化事务处理,减少不必要的数据库交互,例如使用批处理(Batching)来处理多个SQL语句,降低网络传输开销。 - **连接回收与释放**:确保JSP页面在完成数据库操作后正确关闭和释放连接,避免资源...
DBCP数据库连接池的引入,使得应用程序可以预先创建并维护一定数量的数据库连接,当需要与数据库通信时,从连接池中获取一个已存在的连接,用完后不是立即关闭,而是将其归还回连接池,供后续使用。这样减少了频繁的...
2. **批量处理**:对于大量DML操作,如插入和更新,使用批量处理可以显著减少数据库交互次数,降低锁竞争。 3. **连接池管理**:使用连接池如HikariCP或C3P0,可以有效地复用数据库连接,减少建立和关闭连接的开销...
数据库缓存是一种将经常访问的数据存储在内存中的技术,以减少对硬盘的读取,从而提高数据的访问速度。本文将深入探讨Java与数据库缓存的相关知识点,并结合给定的标签“源码”和“工具”,来讨论其在实际应用中的...
总结起来,这份"java数据库技术详解ppt"涵盖了Java与数据库交互的各个方面,包括JDBC、连接池、ORM、事务管理、性能优化以及NoSQL数据库的使用。学习并掌握这些内容,将有助于开发者在实际项目中高效地处理数据存储...