`
conquer0
  • 浏览: 78308 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

缓存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);
        }
    }
}
分享到:
评论

相关推荐

    Cassandra PHP操作类

    Cassandra PHP操作类是针对Apache Cassandra数据库的一种PHP接口,它使得开发者可以轻松地在PHP应用程序中与Cassandra进行交互。Cassandra是一个分布式、高度可扩展的NoSQL数据库系统,广泛用于处理大规模数据。...

    Cassandra使用手册

    Cassandra使用手册详细介绍了数据库的安装、配置、数据模型、命令行操作、Java编程接口Thrift的使用,测试以及具体的系统实例实现。手册的目的是为了让用户能够系统地理解和掌握Cassandra的使用方法,从而在实际的...

    cassandra集群配置

    Cassandra 集群配置详解 本文将通过实例介绍 Cassandra 的简单配置,包括基本配置、集群配置、启动 Cassandra 和集群管理等...通过本文,读者可以了解 Cassandra 集群配置的基本原理和实现方法,并应用于实际项目中。

    php使用cassandra用到的phpcassa-0.1

    1. `phpcassa`源代码目录:包含了phpcassa的PHP源代码文件,这些文件通常以`.php`扩展名结尾,实现了与Cassandra交互的各种类和函数。 2. `README`或`README.md`:文档文件,提供了关于如何安装、配置和使用phpcassa...

    行业分类-设备装置-一种接口调用的缓存实现方法.zip

    "一种接口调用的缓存实现方法"着重探讨了如何利用缓存技术优化接口调用过程,以减少不必要的计算和网络延迟,提高整体系统的效率。 首先,接口调用缓存的基本思想是将频繁访问且结果相对稳定的接口调用结果存储起来...

    iginite-persistence-cassandra:使用Apache Cassandra并使用Kryo序列化程序实现Apache Ignite持久性

    5. **操作数据**:现在,你可以像使用任何其他Ignite缓存一样操作数据,而Ignite会自动处理数据到Cassandra的持久化。 在这个项目中,`ignite-persistence-cassandra-master`目录可能包含了示例代码,演示了如何...

    一种分布式缓存系统的关键技术及应用.pdf

    在实现方面,文章作者屠要峰、刘辉、张国良、刘春等人提出了新一代的分布式缓存系统架构,并针对其关键技术原理进行了深入的研究和实现。他们开发的DCACHE系统,通过在融合通信(Rich Communication Suite,RCS)...

    Python-StreamFramework使用Cassandra和Redis创建动态消息和通知系统

    Python-StreamFramework是一个用于构建这类系统的开源库,它允许开发者使用Cassandra和Redis这两种流行的数据存储技术。本文将深入探讨Stream-Framework如何利用这两种数据库来实现动态消息和通知功能。 首先,让...

    学习总结 包括Java JVM MySQL NoSQL UML 缓存 消息 分布式事务-StudySummary.zip

    理解NoSQL数据库的优势(如水平扩展、分布式存储)和局限性,学会在适当场景下选择合适的NoSQL解决方案,以及掌握其数据模型(键值对、文档型、列族、图形数据库)和操作命令,对于构建现代数据架构至关重要。...

    libQtCassandra:具有Qt Framework的Apache Cassandra的C ++库-开源

    接着,他们可以导入库头文件,并使用提供的类和方法来执行Cassandra相关的操作,如创建表、插入数据、查询数据等。 总之,`libQtCassandra` 是一个强大的工具,为Qt开发者提供了访问Cassandra数据库的便捷途径,它...

    详解第二部分

    2. **集群Gossip协议**:这是Cassandra集群内部节点间通信的核心机制,实现在`org.apache.cassandra.gms.Gossiper`类中。Gossip协议负责维护节点间的心跳信号,传输节点状态信息,包括节点的加入、退出或状态变更。...

    Hibernate开发指南

    通过Hibernate,开发者可以将Java类与数据库表进行映射,通过对象来操作数据库,从而实现了面向对象编程和关系数据库之间的桥梁。 二、Hibernate核心概念 1. 实体(Entity):在Hibernate中,实体是Java类,代表...

    行业分类-设备装置-实现分散原子IO写入.zip

    "实现分散原子IO写入"这个主题聚焦于如何在硬件和软件层面上高效地执行输入/输出(I/O)操作,特别是在分布式系统或者大规模并行处理环境中。下面将详细解析这一技术的关键知识点。 1. **分散IO**:分散IO是指在一...

    NoSQL数据库学习教程.pdf

    缓存式的 Web 应用程序架构是指使用Memcached来实现缓存式的Web应用程序架构。 性能测试是指使用Memcached来测试性能。 dbcached是指使用dbcached来实现分布式缓存。 Memcached 和 dbcached 在功能上一样吗?是指...

    NoSQL数据库笔谈

    I/O的五分钟法则 不要删除数据 RAM是硬盘,硬盘是磁带 Amdahl定律和Gustafson定律 万兆以太网 3. 手段篇 一致性哈希 亚马逊的现状 算法的选择 Quorum NRW Vector clock Virtual node gossip Gossip (State Transfer ...

    redis数据库

    这类数据库最适合用于内容缓存,尤其是面对高访问负载时表现出色。 2. **列存储数据库**:例如Cassandra、HBase、Riak等。这类数据库通常用于分布式文件系统,具有快速查找速度和强大的可扩展性。 3. **文档型数据库...

    spring boot学习代码

    Spring Boot 提供了与 Redis 集成的支持,可以方便地在应用中实现数据的高速读写和缓存管理。 2. MyBatis:MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。Spring Boot 结合 MyBatis ...

    Redis实战 中文

    #### 五、Redis数据类型及操作 ##### 2.2 Strings类型及操作 - **SET**: 设置键的值。 - **GET**: 获取键的值。 - **INCR**: 将存储在键中的数字值增1。 - **DECR**: 将存储在键中的数字值减1。 - **STRLEN**: 获取...

    Java面试题库与答案解析

    1. **Java基础知识**:这是所有Java面试的基础,包括但不限于语法、面向对象编程概念(封装、继承、多态)、异常处理、集合框架(List、Set、Map接口及其实现类如ArrayList、HashSet、HashMap等)、IO流和NIO。...

Global site tag (gtag.js) - Google Analytics