/**
* 缓存操作实现类.
*/
@Service("cassCache")
public class CassCache implements ICassCache
{
/**根据Key和column从缓存读取数据.
* @param aKeyArea Key
* @param aName column
* @return Object 缓存数据
* @throws ApplicationException ApplicationException
*/
public Object get(String aKeyArea, String aName) throws ApplicationException
{
Map<String, Object> resultMap = getResultMap(aKeyArea, aName);
if (resultMap != null)
{
return resultMap.get(CacheConstants.CACHE_MAP_KEY_VALUE);
}
return null;
}
/**根据Key和column从缓存读取数据,包括timestamp.
* @param aKeyArea Key
* @param aName column
* @return Map<String, Object> 缓存数据
* key:"cache.timestamp", value:存放缓存数据时的timestamp
* key:"cache.value", value:缓存对象
*/
public Map<String, Object> getResultMap(String aKeyArea, String aName)
throws ApplicationException
{
Map<String, Object> resultMap = new HashMap<String, Object>();
CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();
// 取得客户端(群集服务器)
CassandraClient client = null;
try
{
// 从群集服务器获得一个客户端
client = pool.borrowClient(mCassandraClient);
// Keyspace
Keyspace keyspace =
client.getKeyspace(mDefaultKeyspace);
// ColumnPath
ColumnPath columnPath = new ColumnPath(mDefaultColumnFamily);
columnPath.setColumn(bytes(aName));
// 从缓存读取
Column col = keyspace.getColumn(aKeyArea, columnPath);
byte[] objBytes = col.getValue();
// 由微秒转换为毫秒
long timestamp = col.getTimestamp()
/ CacheConstants.MICROSECONDS_PER_MILLISECONDS;
// 从字节数组获取对象
Object obj = ByteUtil.getObjectFromBytes(objBytes);
// 缓存对象
resultMap.put(CacheConstants.CACHE_MAP_KEY_VALUE, obj);
// 存放缓存数据时的timestamp
resultMap.put(CacheConstants.CACHE_MAP_KEY_TIMESTAMP, timestamp);
// 为确保finally中能正确释放client,此处需重获取一次
client = keyspace.getClient();
// 用户的缓存数据
return resultMap;
}
// Key或者Column不存在
catch (NotFoundException e)
{
sLog.error(e);
return null;
}
catch (Exception e)
{
sLog.error("根据Key和column从缓存读取数据(包括timestamp)时出错。");
sLog.error(e);
throw new ApplicationException(e);
}
finally
{
// finally中释放client
releaseClient(pool, client);
}
}
}
* 缓存操作实现类.
*/
@Service("cassCache")
public class CassCache implements ICassCache
{
/**根据Key和column从缓存读取数据.
* @param aKeyArea Key
* @param aName column
* @return Object 缓存数据
* @throws ApplicationException ApplicationException
*/
public Object get(String aKeyArea, String aName) throws ApplicationException
{
Map<String, Object> resultMap = getResultMap(aKeyArea, aName);
if (resultMap != null)
{
return resultMap.get(CacheConstants.CACHE_MAP_KEY_VALUE);
}
return null;
}
/**根据Key和column从缓存读取数据,包括timestamp.
* @param aKeyArea Key
* @param aName column
* @return Map<String, Object> 缓存数据
* key:"cache.timestamp", value:存放缓存数据时的timestamp
* key:"cache.value", value:缓存对象
*/
public Map<String, Object> getResultMap(String aKeyArea, String aName)
throws ApplicationException
{
Map<String, Object> resultMap = new HashMap<String, Object>();
CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();
// 取得客户端(群集服务器)
CassandraClient client = null;
try
{
// 从群集服务器获得一个客户端
client = pool.borrowClient(mCassandraClient);
// Keyspace
Keyspace keyspace =
client.getKeyspace(mDefaultKeyspace);
// ColumnPath
ColumnPath columnPath = new ColumnPath(mDefaultColumnFamily);
columnPath.setColumn(bytes(aName));
// 从缓存读取
Column col = keyspace.getColumn(aKeyArea, columnPath);
byte[] objBytes = col.getValue();
// 由微秒转换为毫秒
long timestamp = col.getTimestamp()
/ CacheConstants.MICROSECONDS_PER_MILLISECONDS;
// 从字节数组获取对象
Object obj = ByteUtil.getObjectFromBytes(objBytes);
// 缓存对象
resultMap.put(CacheConstants.CACHE_MAP_KEY_VALUE, obj);
// 存放缓存数据时的timestamp
resultMap.put(CacheConstants.CACHE_MAP_KEY_TIMESTAMP, timestamp);
// 为确保finally中能正确释放client,此处需重获取一次
client = keyspace.getClient();
// 用户的缓存数据
return resultMap;
}
// Key或者Column不存在
catch (NotFoundException e)
{
sLog.error(e);
return null;
}
catch (Exception e)
{
sLog.error("根据Key和column从缓存读取数据(包括timestamp)时出错。");
sLog.error(e);
throw new ApplicationException(e);
}
finally
{
// finally中释放client
releaseClient(pool, client);
}
}
}