资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

怎么用Java写一个简单的缓存操作类

本篇内容介绍了“怎么用Java写一个简单的缓存操作类”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联致力于互联网品牌建设与网络营销,包括网站建设、成都网站建设、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联核心团队10余年专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。


 

一、分析

首先分析一下缓存类该如何设计,这里我以一种非常简单的方式来实现一个缓存类,这也是我一直以来使用的设计方案。

为了明确功能,首先定义一个接口类CacheInt,然后是缓存实现的工具类CacheUtil。然后再看其中的功能,为了存取方便,缓存应是以键值对的形式存取,为了适应更多的场景,所以在存取的时候可以加一个缓存过期时间,然后再加上其他常见的添加、获取、删除、缓存大小、是否存在key、清理过期缓存等方法,整个缓存工具的方法差不多就是这些。

缓存类需要注意的问题:

  1. 缓存对象应该是唯一的,也就是单例的;

  2. 缓存的操作方法要同步,在多线程并发条件下防止出错;

  3. 缓存的容器应该具有较高的并发性能,ConcurrentHashMap是一个不错的选择。

 

二、具体实现

 

1. CacheInt接口的定义

CacheInt接口的定义如下:

怎么用Java写一个简单的缓存操作类

怎么用Java写一个简单的缓存操作类

 

2. CacheUtil的具体实现

缓存实现的核心就是CacheUtil,下面结合注释进行说明,为了避免文章篇幅冗杂,以下截图就是完整源码截图,并且保持先后顺序。

首先是类定义和其属性定义,其中本类实例对象用volatile进行修饰提高可见性,初始化缓存容量用于初始化ConcurrentHashMap缓存容器的大小,此大小根据实际应用场景进行优化

怎么用Java写一个简单的缓存操作类

然后是内部类Entry的定义,该类是用来存储实际数据的,为了方便处理过期时间,添加初始化时间戳、过期时间等属性。

怎么用Java写一个简单的缓存操作类

然后是使用双检锁单例方式获取本类实例对象,因为单例只能存在唯一的特点,所以注意构造函数需要设为private

怎么用Java写一个简单的缓存操作类

接下来是存入缓存数据put()方法,这里的clearExpiredCache()是清理过期缓存,后面会看到方法体,因为在我项目中存入缓存的情况较少,所以这里我固定了每次存之前先清理一次过期时间缓存,这里可以根据自己项目实际情况进行优化。

怎么用Java写一个简单的缓存操作类

然后是获取缓存get()方法,因为获取数据的时间较为多数,所以这里我设定了三分之一的概率清理过期缓存,适当地释放堆内存,并且在获取时检测是否过期,如果已过期然而还获取到了,就删除并返回空。

怎么用Java写一个简单的缓存操作类

然后就是比较常规的一些方法,具体可以看代码

怎么用Java写一个简单的缓存操作类

最后一个方法就是清理过期缓存,这里你可以选择启动一个监听线程实时地清理缓存,也可以选择在适当时机进行一次清理,比如我这里就是在存在put和get操作时固定或概率地清理缓存。

怎么用Java写一个简单的缓存操作类

 

三、并发测试

普通的实现测试这里就不展示了,肯定是没问题的,读者简单写一些测试样例即可,这里主要展示一下并发测试,因为在实际情况中存在并发处理缓存情况,为了确保其正确性,所以并发测试是必须要做的,下面放出我的测试样例。

怎么用Java写一个简单的缓存操作类

怎么用Java写一个简单的缓存操作类

怎么用Java写一个简单的缓存操作类

怎么用Java写一个简单的缓存操作类

最后测试的表现是很好,没有出现不正确的情况,部分测试结果截图如下:

怎么用Java写一个简单的缓存操作类

怎么用Java写一个简单的缓存操作类

怎么用Java写一个简单的缓存操作类

“怎么用Java写一个简单的缓存操作类”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


名称栏目:怎么用Java写一个简单的缓存操作类
链接URL:http://cdkjz.cn/article/pcgssc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220