首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

cassandra内部API应用一2010-07-07

2012-10-06 
cassandra内部API使用一2010-07-07package com.huawei.support.cache.implimport static me.prettyprint.

cassandra内部API使用一2010-07-07
package com.huawei.support.cache.impl;
import static me.prettyprint.cassandra.utils.StringUtils.bytes;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import me.prettyprint.cassandra.service.CassandraClient;
import me.prettyprint.cassandra.service.CassandraClientPool;
import me.prettyprint.cassandra.service.CassandraClientPoolFactory;
import me.prettyprint.cassandra.service.Keyspace;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.ColumnPath;
import org.apache.cassandra.thrift.NotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
import com.huawei.support.cache.CacheConstants;
import com.huawei.support.cache.ICassCache;
import com.huawei.support.utils.ByteUtil;

/**
* 缓存操作实现类.
*/
@Service("cassCache")
public class CassCache implements ICassCache
{
    /**
     * sLog
     */
    private static Log sLog = LogFactory.getLog(CassCache.class);

    /**
     * 客户端(群集服务器)
     */
    private String[] mCassandraClient;

    /**
     * 默认Keyspace
     */
    private String mDefaultKeyspace;

    /**
     * 默认columnFamily
     */
    private String mDefaultColumnFamily;

    /** 构造函数.
     */
    public CassCache()
    {
        // 客户端(群集服务器)
        mCassandraClient = CacheConfigReader.getInstance()
                .getCassandraClient();

        // 默认Keyspace
        mDefaultKeyspace = CacheConfigReader.getInstance().getDefaultKeyspace();

        // 默认columnFamily
        mDefaultColumnFamily = CacheConfigReader.getInstance()
                .getDefaultColumnFamily();
    }

    /**向缓存中存放数据.
     *
     * @param aKeyArea Key
     * @param aName column
     * @param aSerialObj 缓存对象
     */
    public void put(String aKeyArea, String aName, Serializable aSerialObj)
    {
        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));

            // 从对象获取字节数组
            byte[] objBytes = ByteUtil.getBytesFromObject(aSerialObj);

            // 向缓存中存放数据
            keyspace.insert(aKeyArea, columnPath, objBytes);

            // 为确保finally中能正确释放client,此处需重获取一次
            client = keyspace.getClient();
        }
        catch (Exception e)
        {
            sLog.error("向缓存中存放数据时出错。");
            sLog.error(e);
        }
        finally
        {
            // finally中释放client
            releaseClient(pool, client);
        }
    } 1 楼 yyf365 2011-03-20   想请问,你的实现中可否支持多线程?

热点排行