缓存cassandra六(缓存操作实现类)续五

/**
* 缓存操作实现类.
*/
@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);
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值