Java实现简单的缓存机制原理

Java实现简单的缓存机制原理,第1张

package qinbo hui

/*

设计思想来自-回钦波(qq: )

*/

public class CacheConfModel implements java io Serializable{

private long beginTime

private boolean isForever = false

private int durableTime

public long getBeginTime() {

return beginTime

}

public void setBeginTime(long beginTime) {

this beginTime = beginTime

}

public boolean isForever() {

return isForever

}

public void setForever(boolean isForever) {

this isForever = isForever

}

public int getDurableTime() {

return durableTime

}

public void setDurableTime(int durableTime) {

this durableTime = durableTime

}

}

package qinbo hui

import java util *

import test CacheConfModel

/*

设计思想来自-回钦波(qq: )

*/

public class CacheMgr {

private static Map cacheMap = new HashMap()

private static Map cacheConfMap = new HashMap()

private CacheMgr(){

}

private static CacheMgr cm = null

public static CacheMgr getInstance(){

if(cm==null){

cm = new CacheMgr()

Thread t = new ClearCache()

t start()

}

return cm

}

/**

* 增加缓存

* @param key

* @param value

* @param ccm 缓存对象

* @return

*/

public  boolean addCache(Object key Object value CacheConfModel ccm){

boolean flag = false

cacheMap put(key value)

cacheConfMap put(key ccm)

System out println( now addcache== +cacheMap size())

return true

}

/**

* 删除缓存

* @param key

* @return

*/

public  boolean removeCache(Object key){

cacheMap remove(key)

cacheConfMap remove(key)

System out println( now removeCache== +cacheMap size())

return true

}

/**

* 清除缓存的类

* @author wanglj

* 继承Thread线程

*/

private static class ClearCache extends Thread{

public void run(){

while(true){

Set tempSet = new HashSet()

Set set = cacheConfMap keySet()

Iterator it = erator()

while(it hasNext()){

Object key = it next()

CacheConfModel ccm = (CacheConfModel)cacheConfMap get(key)

//比较是否需要清除

if(!ccm isForever()){

if((new Date() getTime() ccm getBeginTime())>= ccm getDurableTime()* * ){

//可以清除 先记录下来

tempSet add(key)

}

}

}

//真正清除

Iterator tempIt = erator()

while(tempIt hasNext()){

Object key = tempIt next()

cacheMap remove(key)

cacheConfMap remove(key)

}

System out println( now thread================>+cacheMap size())

//休息

try {

Thread sleep( * L)

} catch (InterruptedException e) {

// TODO Auto generated catch block

e printStackTrace()

}

}

}

}

lishixinzhi/Article/program/Java/hx/201311/25737

java放入session缓存中

方法如下:

session.setAttribute("Name",Value)

Name 随便取,value就是要放的数据

获取的时候session.getAttribute("Name)

就可以了

你这个分数太少了吧,程序到是有,不过给你有点可惜

CacheMgr.java

import java.util.*

import cn.javass.framework.cache.vo.CacheConfModel

public class CacheMgr {

private static Map cacheMap = new HashMap()

private static Map cacheConfMap = new HashMap()

private CacheMgr(){

}

private static CacheMgr cm = null

public static CacheMgr getInstance(){

if(cm==null){

cm = new CacheMgr()

Thread t = new ClearCache()

t.start()

}

return cm

}

/**

* 增加缓存

* @param key

* @param value

* @param ccm 缓存对象

* @return

*/

public boolean addCache(Object key,Object value,CacheConfModel ccm){

boolean flag = false

cacheMap.put(key, value)

cacheConfMap.put(key, ccm)

System.out.println("now addcache=="+cacheMap.size())

return true

}

/**

* 删除缓存

* @param key

* @return

*/

public boolean removeCache(Object key){

cacheMap.remove(key)

cacheConfMap.remove(key)

System.out.println("now removeCache=="+cacheMap.size())

return true

}

/**

* 清除缓存的类

* @author wanglj

* 继承Thread线程类

*/

private static class ClearCache extends Thread{

public void run(){

while(true){

Set tempSet = new HashSet()

Set set = cacheConfMap.keySet()

Iterator it = set.iterator()

while(it.hasNext()){

Object key = it.next()

CacheConfModel ccm = (CacheConfModel)cacheConfMap.get(key)

//比较是否需要清除

if(!ccm.isForever()){

if((new Date().getTime()-ccm.getBeginTime())>= ccm.getDurableTime()*60*1000){

//可以清除,先记录下来

tempSet.add(key)

}

}

}

//真正清除

Iterator tempIt = tempSet.iterator()

while(tempIt.hasNext()){

Object key = tempIt.next()

cacheMap.remove(key)

cacheConfMap.remove(key)

}

System.out.println("now thread================>"+cacheMap.size())

//休息

try {

Thread.sleep(60*1000L)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

}

}

}

CacheConfModel.java

public class CacheConfModel implements java.io.Serializable{

private long beginTime

private boolean isForever = false

private int durableTime

public long getBeginTime() {

return beginTime

}

public void setBeginTime(long beginTime) {

this.beginTime = beginTime

}

public boolean isForever() {

return isForever

}

public void setForever(boolean isForever) {

this.isForever = isForever

}

public int getDurableTime() {

return durableTime

}

public void setDurableTime(int durableTime) {

this.durableTime = durableTime

}

}

顺便说一句,缓存的管理不是靠时间久来计算的,是靠最大不活动间隔计算的,你的设计思想有问题


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11306960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存