java jdis 可以缓存map 吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java jdis 可以缓存map 吗相关的知识,希望对你有一定的参考价值。

参考技术A 缓存是Java中主要的内容,主要目的是缓解项目访问数据库的压力以及提升访问数据的效率,以下是通过Map实现java缓存的功能,并没有用cache相关框架。
一、缓存管理类 CacheMgr.java

[java] view plain copy
package cache.com;

import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* 缓存管理类
* @author Administrator
*
*/
public class CacheMgr

private static Map cacheMap = new HashMap();
private static Map cacheConfMap = new HashMap();

private static CacheMgr cm = null;

//构造方法
private CacheMgr()


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)
System.out.println("开始增加缓存-------------");
boolean flag = false;
try
cacheMap.put(key, value);
cacheConfMap.put(key, ccm);
System.out.println("增加缓存结束-------------");
System.out.println("now addcache=="+cacheMap.size());
flag=true;
catch (Exception e)
e.printStackTrace();


return flag;


/**
* 获取缓存实体
*/
public Object getValue(String key)
Object ob=cacheMap.get(key);
if(ob!=null)
return ob;
else
return null;



/**
* 获取缓存数据的数量
* @return
*/
public int getSize()
return cacheMap.size();


/**
* 删除缓存
* @param key
* @return
*/
public boolean removeCache(Object key)
boolean flag=false;
try
cacheMap.remove(key);
cacheConfMap.remove(key);
flag=true;
catch (Exception e)
e.printStackTrace();

return flag;


/**
* 清除缓存的类
* 继承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)
e.printStackTrace();







二、缓存属性类 CacheConfModel.java

[java] view plain copy
package cache.com;
/**
* 缓存属性类
* @author Administrator
*
*/
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;


地图可以使用 java.text.Collat​​or 吗?

【中文标题】地图可以使用 java.text.Collat​​or 吗?【英文标题】:Can a map use java.text.Collator? 【发布时间】:2011-10-17 05:51:02 【问题描述】:

我使用的是 SQL Server 2008 R2。

我有一个从数据库中检索到的数据缓存,目前获取字符串的方法是通过map.get()。但是,代码的某些部分直接从数据库查询,而不是仅使用缓存,因为这些情况需要一些连接。现在的问题是,表上的 collation 导致通过 SQL 比较(使用表排序规则)进行文本比较和通过 Java 使用 map.get() 进行文本比较之间存在不同的行为。

我已经阅读了java.text.Collator,但它需要使用collator.Compare 才能正确使用。有没有办法强制地图使用固定的Collator

顺便说一下,这种情况下的排序规则是使用日文字符,在 SQL Server 中比较时,半角和全角日文是相同的。

【问题讨论】:

【参考方案1】:

您可以将 TreeMap 与为您的案例正确配置的 Collat​​or 一起使用。这是一个将大写和小写拉丁字符视为等效的示例:

Collator collator = Collator.getInstance(Locale.FRENCH);
collator.setStrength(Collator.PRIMARY);

Map<String, String> map = new TreeMap<String, String>(collator);

map.put("ABC", "foo");

System.out.println(map.get("abc"));

【讨论】:

【参考方案2】:

您可以使用Japanese Locale 发起Collator 喜欢:

Collator collator = Collator.getInstance( Locale.JAPANESE );

然后您可以比较以下字符串:

int comparison = collator.compare( strOne, strTwo );

【讨论】:

以上是关于java jdis 可以缓存map 吗的主要内容,如果未能解决你的问题,请参考以下文章

缓存值对象的Infinispan限制

echarts map能把某个省份去除不显示吗

java map key可以重复吗

java map key可以重复吗

Java内存缓存-通过Map定制简单缓存

Java内存缓存-通过Map定制简单缓存