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.exception.ApplicationException;
import com.huawei.support.utils.ByteUtil;
/**
* 缓存操作实现类.
*/
@Service("cassCache")
public class CassCache implements ICassCache
{
private static Log sLog = LogFactory.getLog(CassCache.class);
/**
* 客户端(群集服务器)
*/
private String[] mCassandraClient;
/**
* 默认Keyspace
*/
private String mDefaultKeyspace;
/**
* 默认columnFamily
*/
private String mDefaultColumnFamily;
/** 构造函数.
*/
public CassCache() throws ApplicationException
{
// 客户端(群集服务器)
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)
throws ApplicationException
{
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);
throw new ApplicationException(e);
}
finally
{
// finally中释放client
releaseClient(pool, client);
}
}
}
分享到:
相关推荐
Cassandra PHP操作类是针对Apache Cassandra数据库的一种PHP接口,它使得开发者可以轻松地在PHP应用程序中与Cassandra进行交互。Cassandra是一个分布式、高度可扩展的NoSQL数据库系统,广泛用于处理大规模数据。...
Cassandra使用手册详细介绍了数据库的安装、配置、数据模型、命令行操作、Java编程接口Thrift的使用,测试以及具体的系统实例实现。手册的目的是为了让用户能够系统地理解和掌握Cassandra的使用方法,从而在实际的...
Cassandra 集群配置详解 本文将通过实例介绍 Cassandra 的简单配置,包括基本配置、集群配置、启动 Cassandra 和集群管理等...通过本文,读者可以了解 Cassandra 集群配置的基本原理和实现方法,并应用于实际项目中。
1. `phpcassa`源代码目录:包含了phpcassa的PHP源代码文件,这些文件通常以`.php`扩展名结尾,实现了与Cassandra交互的各种类和函数。 2. `README`或`README.md`:文档文件,提供了关于如何安装、配置和使用phpcassa...
"一种接口调用的缓存实现方法"着重探讨了如何利用缓存技术优化接口调用过程,以减少不必要的计算和网络延迟,提高整体系统的效率。 首先,接口调用缓存的基本思想是将频繁访问且结果相对稳定的接口调用结果存储起来...
5. **操作数据**:现在,你可以像使用任何其他Ignite缓存一样操作数据,而Ignite会自动处理数据到Cassandra的持久化。 在这个项目中,`ignite-persistence-cassandra-master`目录可能包含了示例代码,演示了如何...
在实现方面,文章作者屠要峰、刘辉、张国良、刘春等人提出了新一代的分布式缓存系统架构,并针对其关键技术原理进行了深入的研究和实现。他们开发的DCACHE系统,通过在融合通信(Rich Communication Suite,RCS)...
理解NoSQL数据库的优势(如水平扩展、分布式存储)和局限性,学会在适当场景下选择合适的NoSQL解决方案,以及掌握其数据模型(键值对、文档型、列族、图形数据库)和操作命令,对于构建现代数据架构至关重要。...
Python-StreamFramework是一个用于构建这类系统的开源库,它允许开发者使用Cassandra和Redis这两种流行的数据存储技术。本文将深入探讨Stream-Framework如何利用这两种数据库来实现动态消息和通知功能。 首先,让...
接着,他们可以导入库头文件,并使用提供的类和方法来执行Cassandra相关的操作,如创建表、插入数据、查询数据等。 总之,`libQtCassandra` 是一个强大的工具,为Qt开发者提供了访问Cassandra数据库的便捷途径,它...
2. **集群Gossip协议**:这是Cassandra集群内部节点间通信的核心机制,实现在`org.apache.cassandra.gms.Gossiper`类中。Gossip协议负责维护节点间的心跳信号,传输节点状态信息,包括节点的加入、退出或状态变更。...
通过Hibernate,开发者可以将Java类与数据库表进行映射,通过对象来操作数据库,从而实现了面向对象编程和关系数据库之间的桥梁。 二、Hibernate核心概念 1. 实体(Entity):在Hibernate中,实体是Java类,代表...
"实现分散原子IO写入"这个主题聚焦于如何在硬件和软件层面上高效地执行输入/输出(I/O)操作,特别是在分布式系统或者大规模并行处理环境中。下面将详细解析这一技术的关键知识点。 1. **分散IO**:分散IO是指在一...
缓存式的 Web 应用程序架构是指使用Memcached来实现缓存式的Web应用程序架构。 性能测试是指使用Memcached来测试性能。 dbcached是指使用dbcached来实现分布式缓存。 Memcached 和 dbcached 在功能上一样吗?是指...
I/O的五分钟法则 不要删除数据 RAM是硬盘,硬盘是磁带 Amdahl定律和Gustafson定律 万兆以太网 3. 手段篇 一致性哈希 亚马逊的现状 算法的选择 Quorum NRW Vector clock Virtual node gossip Gossip (State Transfer ...
Spring Boot 提供了与 Redis 集成的支持,可以方便地在应用中实现数据的高速读写和缓存管理。 2. MyBatis:MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。Spring Boot 结合 MyBatis ...
- 设计缓存类时,需要一个内存存储结构,如LinkedHashMap,以支持先进先出(FIFO)的特性。 - 对于定时刷新,可以使用定时任务来实现缓存值的更新。 2. **缓存机制与容量控制:** - 缓存类应当支持设置过期时间...
这类数据库最适合用于内容缓存,尤其是面对高访问负载时表现出色。 2. **列存储数据库**:例如Cassandra、HBase、Riak等。这类数据库通常用于分布式文件系统,具有快速查找速度和强大的可扩展性。 3. **文档型数据库...
1. **Java基础知识**:这是所有Java面试的基础,包括但不限于语法、面向对象编程概念(封装、继承、多态)、异常处理、集合框架(List、Set、Map接口及其实现类如ArrayList、HashSet、HashMap等)、IO流和NIO。...