缓存cassandra6(缓存操作实现类)续五

缓存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);
        }
    }
}