Spring Data Redis 让 NoSQL 快如闪电 (1)

  • 时间:
  • 浏览:0
  • 来源:大发时时彩代理—大发大发彩票app

在本文中,笔者会介绍许多有关 Redis 的简单用例和进阶用例以及性能调优情況。当然,我总要做个简单概述,但我相信各位基本都了解 NoSQL 及其各种除理方案。

为了除理指在这人情況,还不可以给所有数据库更新操作加上八个 多 @CachePut 注释。每次调用哪此土土措施时,返回值就会替换掉远程缓存中另八个 多 的对象。在数据库读取和写入上都更新缓存,还不可以让缓存服务器和后台数据之间的记录保持同步。

在越来越 网络开销的系统中,本地缓存快于远程缓存。本地缓存的缺点是,同八个 多 对象的多个拷贝在服务器集群中的各个不同节点之中会同步得调慢。正因越来越 ,本地缓存仅适用于静态数据,这类可容忍短期滞后和不一致问題的系统级设置。但是 为易易挥发的业务数据(这类用户数据和交易数据)使用本地缓存,很有但是 会以运行应用任务管理器服务器的单个实例而告终。

亚马逊公司在很大程度上依赖缓存服务器来最大程度地减少其零售网站的延迟,该公司甚至另八个 多 发布过一份案例分析,其中记录了延迟和收益之间的关系。

Amazon Elasticache 是一款内存缓存服务,可结合 Memcached 或 Redis 作为缓存服务器使用。嘴笨 Elasticache 找不到本文介绍范围内,但笔者还是想给各位开发人员介绍八个 多 结合 Redis 使用 Elasticache 的技巧。对于大多数 Redis 参数,使用其默认值并无大碍,但 tcp-keepalivetimeout 的默认 Redis 设置不要说会移除已无效的客户连接,最后总要耗尽缓存服务器上的套接口。结合 Elasticache 使用 Redis 时,务必每次都明确设置这人个多 值。

列表 1 给出了八个 多 Spring 数据缓存的示例。

建立在 Java 企业版之上的多层体系社会形态是强大的服务器端编程除理方案。作为一名从业多年的 Java 企业版开发人员,我最满意的就说 三层企业开发法:最下方是 JPA/Hibernate 持久层,中间是 Spring 或 EJB 应用层,最中间则是 web 层。对于较为复杂性的用例,我用 BPM(业务流程管理)、八个 多 这类 Drools 的规则引擎和八个 多 集成框架(这类 Camel)集成了八个 多 工作流驱动的除理方案。

要想提升应用任务管理器服务器的性能,数据缓存但是 是性价比最高的土土措施了。利用 Spring 的缓存抽象注释(@Cacheable@CachePut@CacheEvict@Caching@CacheConfig)还不可以毫不费力地启用数据缓存。在 Spring 配置下,用户还还不可以把 Ehcache、Memcached 或 Redis 当作基本缓存服务器。

远程缓存服务器就越来越 这人局限性。在同八个 多 键的情況下,可保证缓存服务器上的对象越来越 八个 多 拷贝。只要用户让缓存中的对象及其数据库值彼此保持同步,就不要除理过期数据。

Encache 通常被配置成本地缓存层,具有嵌套社会形态,在应用的 JVM 上运行。 Memcached 和 Redis 都能作为独立的缓存服务器运行。要想把 Redis 缓存集成到基于 Spring 的应用中,还不可以使用 Spring Data Redis 的 RedisTemplate 和 RedisCacheManager。

和大多数 NoSQL 数据库一样,Redis 舍弃了表格、行列的关系概念。而事实上,Redis 是一种生活键值数据库,利用独特的字符串键值来存储和检索每条记录。Redis 支持把以下内置数据社会形态作为所有记录的值:

听起来青春恋爱物语完美,对吧?事实当然还不可以另八个 多 。利用列表 1 中的配置,负载较低时但是 不要遇到任何问題,但随着服务器集群上的负载逐渐增加,远程缓存上就会跳出过期数据。要做好准备应对服务器节点争用甚至更糟的情況。即使成功写入数据库,最后也但是 会但是 网络故障而使得缓存服务器 PUT 以失败告终。另外,NoSQL 通常不支持在关系数据库中指在完全事务语义,但是 这会由于 帕累托图提交。为了让代码容错,还不可以考虑给数据模型增加版本号,实现乐观锁。

在 Redis 中访问已缓存的对象,耗时通常越来越 数毫秒,和关系数据库查询相比,这大幅提升了应用任务管理器的性能。

列表 1:在基于 Spring 的应用中启用缓存

但是 ,笔者最近接到八个 多 任务,要设计八个 多 拥有亚秒级响应延迟不可以支持成千上万名并发用户的系统。我立即发现了我本人常用的 Java 企业版栈区的局限性。基于关系数据库管理系统的传统型 web 应用任务管理器,包括在 Hibernate/JPA 之上构建的应用任务管理器,还不可以二阶延迟,扩展效果不佳。传统的 Java 企业版持久性体系社会形态无法满足我当时设计的系统的性能和除理能力要求。但是 我转而尝试 NoSQL,最后发现了 Redis。

作为一种生活内存数据库,Redis 的存储容量有限; AWS EC2 中的最大实例为 r3.8xlarge,内存 244 GB。但是 数据社会形态的索引和性能都经过优化,Redis 消耗的内存比所存储的数据量大得多。切分 Redis 助于克服这人局限性。要把内存数据备份到硬盘上,还不可以在预定作业中进行时间点转储,也还不可以根据还不可以运行 dump 命令。

对于 Redis,让我们都都注意到的第八个 多 特点但是 就说 它的速率单位极快。根据记录的大小和连接的数量,性能基准会有所不同,但延迟通常为单数位毫秒。在大多数用例中,Redis 每秒最多可支持 5000 次请求。但是 用户使用较高端的硬件,除理能力更可高达每秒 700000 次请求(但这人数值但是 会被网卡速率单位扼制)。

Redis 几乎拥有针对所有编程语言的各种客户端库,其中就包括 Java。Jedis 但是 是最受欢迎的 Java 客户端库了。本文中的示例都基于 Spring Data Redis,我把它作为八个 多 较高层次的包装任务管理器 API。Spring Data Redis 不仅配置方便,但是 拥有各种友好的 API 和实用插件。

列表 2:除理缓存中的过期对象

不同于关系数据库管理系统中的表,Redis 数据社会形态是即时实例化的。但是 用户查询的内容不指在于 Redis 中,系统只会返回空值。嘴笨 Redis 不允许嵌套社会形态,但用户还不可以执行自定义的 Java 或 JSON 串行器/解串器,从而将 POJO 映射到字符串。通过这人土土措施,就还不可以把任意 Java bean 保存为 STRING,但是 将其放置在 LISTSET 中,等等。

在本文的第二帕累托图,将介绍 Redis 的6大用例,敬请期待。

原文地址:http://www.javaworld.com/article/5062899/big-data/lightning-fast-nosql-with-spring-data-redis.html?page=1

在收到 OptimisticLockingFailureExceptionCurrentModificationException(具体取决于持久性除理方案)时,还不可以调用中含 @CacheEvict 注释的土土措施,从缓存中清除过期拷贝,但是 重试同八个 多 操作:

【编者按】本文作者为 Xinyu Liu,完全介绍了 Redis 的社会形态,并辅之以充足的用例。在本文的第一帕累托图,将重点概述 Redis 的方方面面。文章系国内 ITOM 管理平台 OneAPM 编译呈现。

本文转自 OneAPM 官方博客

作为一种生活内存键值数据库,Redis 打破了数据库的传统定义(将数据保指在硬盘上)。反之,使用 Redis 时可结合持久性的 NoSQL 数据库,比如 MongoDB、HBase、Cassandra 或 DynamoDB。Redis 以远程缓存服务器见长,对易易挥发数据来说是极快型数据库。

结合 Elasticache 使用 Redis

这里的读取操作被 Spring 的 @Cacheable 注释围绕,作为 AOP 幕僚而执行。Spring 中的存活时间设置也规定了哪此对象可在缓存中等待时间的时间。调用 get() 土土措施后,Spring 就会试着先从远程缓存读取和返回对象。但是 未找到对象,Spring 会执行土土措施主体,但是 将数据库结果装入 远程缓存中,另八个 多 再返回结果。

延迟和收益

Spring Data Redis

但但是 另八个 多 过程(这类另八个 多 服务器节点)甚至同八个 多 JVM 中的另八个 多 任务管理器在数据库中更新了同八个 多 对象,又会怎样呢?但是 只运用 @Cacheable 注释,你但是 会从远程缓存服务器收到过期拷贝。