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);
}
}
分享到:
相关推荐
4. **测试代码**:如`test`目录,用于验证Cassandra的功能和性能,通过这些测试,开发者可以了解如何正确使用Cassandra API。 在0.5.1版本中,Cassandra可能引入了以下特性: - **更好的一致性模型**:Cassandra...
这个库的主要目的是简化Cassandra API的使用,通过提供与Qt语法兼容的API,使得在Qt应用中操作Cassandra数据库变得更加直观和高效。 首先,让我们深入了解`libQtCassandra`的核心特性: 1. **Qt集成**:此库是专门...
1. **起源与设计理念**:Cassandra最初由Facebook开发,用于管理其内部的 inbox 搜索功能。后来成为Apache顶级项目,受到了Google Bigtable和Amazon Dynamo的启发,采用了一种分片和复制的架构,旨在提供线性可扩展...
在Cassandra中,Thrift提供了一组API,用于在Cassandra节点间传递数据和管理请求。 2. **C#与Thrift集成**: 要在C#中使用Thrift,首先需要安装Apache.Cassandra库,这个库包含了Cassandra的Thrift绑定。开发者...
Apache Cassandra 作为一款高度可扩展、高可用的分布式数据库系统,已经在许多大型互联网公司和组织中得到广泛应用。它的灵活数据模型、强大的集群管理和自动数据恢复能力使其成为处理海量数据的理想选择。无论是...
Cassandra可能利用它来处理内部的数据对象。 这些开源项目共同构成了Cassandra开发环境的基础,它们为Cassandra提供了核心功能、网络通信、配置管理、解析处理等能力。了解这些依赖可以帮助开发者更好地理解和维护...
它以其高性能和可扩展性著称,其背后的核心存储机制是Apache Cassandra,这是一款分布式NoSQL数据库系统,确保了数据的高可用性和水平扩展能力。 KairosDB的优势在于其灵活性和定制化能力。由于它建立在Cassandra之...
- **数据模型**:Cassandra 使用列族(Column Family)作为基本的数据组织单位,每个列族内部包含多个列,每列由名称、值和时间戳组成。此外,Cassandra 还支持标准列族和超级列族两种数据模型。 - **系统架构**:...
2. 使用Cassandra API进行数据操作:插入、查询、更新和删除。 3. 集群管理和运维工具:如nodetool的使用、故障排查。 4. 分析Cassandra源码,理解其内部工作机制。 5. 特定版本(Cassandra 6.0)的新特性、改进和...
Apache Cassandra是一款分布式NoSQL数据库系统,它以高可用性、可扩展性和高性能著称。v4.1.1是该系统的稳定版本,GA(General Availability)代表此版本已对外正式发布,适合生产环境使用。本压缩包“Apache ...
- **简单接口**:`pycassa` 提供了一种直观的 Python API,允许开发者通过简单的函数调用来执行常见的数据库操作,如插入、查询、更新和删除数据。 - **自动分片**:`pycassa` 能自动处理数据分片,确保数据在 ...
Kong是一个高可用、易扩展的API网关项目,其核心基于OpenResty构建,利用了Nginx的高性能和Lua语言的灵活性。Kong的设计允许它轻松应对大量网络请求,并且可以水平扩展,实现多个Kong服务器的集群部署。它通过负载...
对于Spring框架来说,Javadoc-API文档是开发者理解框架内部工作原理、查找API使用方法的必备资源。Spring-framework-4.3的Javadoc-API文档,详尽地记录了该版本中所有公开的类和接口,以及它们的使用方式,使得...
本压缩包文件"Kong-master"可能包含的是Kong的源代码或一个完整的开发环境,以便于开发者深入了解其内部工作原理,或者进行定制化开发。 Kong的主要功能包括: 1. **API路由与分发**:Kong可以作为API的前门,根据...
【标题解析】 ...通过参与cassandraChat项目,开发者不仅可以提升JavaScript编程技能,还能深入理解Cassandra数据库的内部运作,对于想要涉足大数据处理和分布式系统的开发者来说,是一个极好的实践平台。
通过对 `flink-1.8.1-src.tgz` 的源码学习,开发者可以深入了解 Flink 的内部工作机制,更好地利用其特性来构建高效、可靠的实时数据处理系统。同时,源码研究也是深入理解分布式计算原理和实践的好途径。
- **Internal API Layer**:提供内部API接口,包括Schema管理、图操作、索引等功能。 - **Graph Engine**:执行具体的图计算任务。 - **Backend Storage Interface**:后端存储接口,用于与不同的存储系统交互。 - *...
3. **API 网关概念**:API 网关是微服务架构中的一个重要组件,它作为外部请求和内部服务之间的代理。Kong 作为 API 网关,负责路由请求、执行安全策略、进行负载均衡,并且可以通过 Lua 插件实现更复杂的业务逻辑。...
【Apollon嵌入式Cassandra】是一种专为Java开发者设计的数据存储解决方案,它将Apache Cassandra数据库集成到Java应用程序中,作为一个嵌入式的组件。Apollon的主要目标是简化开发流程,让开发者能够快速地在应用中...