最强 Java Redis 客户端
点击上方“方志朋”,选择“设为星标”
回复”666“获取新整理的面试资料
来源:dzone.com/articles/java-distributed-caching-in-redis
1. Redisson 分布式缓存
2. Map
3. Spring Cache
4. JCache
为什么要在 Java 分布式应用程序中使用缓存?
在提高应用程序速度和性能上,每一毫秒都很重要。根据谷歌的一项研究,假如一个网站在3秒钟或更短时间内没有加载成功,会有 53% 的手机用户会离开。
缓存是让分布式应用程序加速的重要技术之一。存储的信息越接近 CPU,访问速度就越快。从 CPU 缓存中加载数据比从 RAM 中加载要快得多,比从硬盘或网络上加载要快得多得多。
要存储经常访问的数据,分布式应用程序需要在多台机器中维护缓存。分布式缓存是降低分布式应用程序延迟、提高并发性和可伸缩性的一种重要策略。
Redis 是一种流行的开源内存数据存储,可用作数据库、缓存或消息代理。由于是从内存而非磁盘加载数据,Redis 比许多传统的数据库解决方案更快。
然而,对开发者来说让 Redis 分布式缓存正确工作是一个巨大挑战。例如,必须谨慎处理本地缓存失效,即替换或删除缓存条目。每次更新或删除存储计算机本地缓存中的信息时,必须更新分布式缓存系统所有计算机内存中的缓存。
好消息是,有一些类似 Redisson 这样的 Redis 框架,可以帮助构建应用程序所需的分布式缓存。下一节将讨论 Redisson 中分布式缓存的三个重要实现:Maps、Spring Cache 和 JCache。
1. Redisson 分布式缓存
Redisson 是一个基于 Redis 的框架,用 Java 实现了一个 Redis 包装器(wrapper)和接口。Redisson 包含许多常见的 Java 类,例如分布式对象、分布式服务、分布式锁和同步器,以及分布式集合。正如下面即将介绍的,其中一些接口同时支持分布式缓存和本地缓存。
2. Map
Map 是 Java 最有用的集合之一。Redisson 提供了一个名为 RMap 的 Java Map 实现,支持本地缓存。
如果希望执行多个读操作或网络环回(roundtrip),应使用支持本地缓存的 RMap。通过本地存储 Map 数据,RMap 比不启用本地缓存时快45倍。通用分布式缓存使用 RMapCache,本地缓存使用 RLocalCachedMap。
Redis 引擎自身能够执行缓存,不需要在客户端执行代码。然而,虽然本地缓存能显著提高读取速度,但需要由开发人员维护,并且可能需要一些开发工作。Redisson 为开发人员提供了 RLocalCachedMap 对象,让本地缓存实现起来更容易。
下面的代码展示了如何初始化 RMapCache 对象:
RMapCache<String, SomeObject> map = redisson.getMapCache("anyMap");
map.put("key1", new SomeObject(), 10, TimeUnit.MINUTES, 10, TimeUnit.SECONDS);
上面的代码将字符串 "key1" 放到 RMapCache 中,并与 SomeObject() 关联。然后它指定了两个参数,TTL设为10分钟、最大空闲时间10秒。
当不再需要时,应销毁 RMapCache 对象:
map.destroy();
Redisson 关闭后不用再做销毁操作。
3. Spring Cache
Spring 是一个用于构建企业级 Web 应用程序的 Java 框架,也提供了缓存支持。
Redisson 包含了 Spring 缓存功能,提供两个对象:RedissonSpringCacheManager 和 RedissonSpringLocalCachedCacheManager。RedissonSpringLocalCachedCacheManager 支持本地缓存。
下面是一个 RedissonSpringLocalCachedCacheManager 对象的示例配置:
@Configuration
@ComponentScan
@EnableCaching
public static class Application {@Bean(destroyMethod="shutdown")RedissonClient redisson() throws IOException {Config config = new Config();config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001");return Redisson.create(config);}@BeanCacheManager cacheManager(RedissonClient redissonClient) {Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();// 新建 "testMap" 缓存:ttl=24分钟,maxIdleTime=12分钟config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));return new RedissonSpringCacheManager(redissonClient, config);}
}
此外,还可以读取 JSON 或 YAML 文件配置 RedissonSpringCacheManager。
与 RMaps 一样,每个 RedissonSpringCacheManager 实例都有两个重要参数: ttl(生存时间)和 maxIdleTime。如果这些参数设为0或者没有定义,那么数据将无限期地保留在缓存中。
4. JCache
JCache 是一个 Java 缓存 API,允许开发人员从缓存临时存储、检索、更新和删除对象。
Redisson 提供了 Redis 的 JCache API 实现。下面是在 Redisson 中使用默认配置调用 JCache API 的示例:
MutableConfiguration<String, String> config = new MutableConfiguration<>();
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", config);
此外,还可以使用自定义配置文件、Redisson Config 对象或 Redisson RedissonClient 对象配置 JCache。例如,下面的代码使用自定义 Redisson 配置来调用 JCache:
MutableConfiguration<String, String> jcacheConfig = new MutableConfiguration<>();
Config redissonCfg = ...
Configuration<String, String> config = RedissonConfiguration.fromConfig(redissonCfg, jcacheConfig);
CacheManager manager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = manager.createCache("namedCache", config);
Redisson 的 JCache 实现已经通过 JCache TCK 的所有测试。你也可以自行验证。
让我们愉快地使用缓存吧!
热门内容:
深入理解 Spring Cloud 核心组件与底层原理
微服务 2.0 技术栈选型手册
为什么魂斗罗只有128KB却可以实现那么长的剧情?
IDEA高级用法:集成JIRA、UML类图插件、SSH、FTP、Database管理...
扛住 100 亿次请求?我们来试一试
今日头条技术架构分析
支付宝的架构到底有多牛逼!还没看完我就跪了!
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
最强 Java Redis 客户端相关推荐
- Java开发-Redis客户端Jedis
1.部署Redis后启动服务端: 2.Jedis网址:https://github.com/xetorthio/jedis/tree/2.6 应用maven管理jar包依赖:新建maven项目(ecl ...
- java实现redis客户端_windows下java swt实现操作redis的客户端工具
redisclient 1.0 正式发布,适用于多个 Redis 版本,主要更新内容如下: 1.管理 Redis 服务器 2.管理 Redis data favorite 3.管理 Redis 数据 ...
- JAVA连接Redis客户端多种方式实现
Jedis介绍 Redis不仅使用命令来操作,而且可以使用程序客户端操作.现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Jav ...
- java redis管道_Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式)介绍
jedis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务.管道及有jedis自身实现的分布式. 在这里对jedis关于事务.管道和分布式 ...
- 阿里云专访Redisson作者Rui Gu:构建开源企业级Redis客户端之路
摘要: 本文为阿里云同学在RedisConf2018上对Redisson开源客户端作者Rui Gu做的一个专访,主要介绍了Rui Gu参与开启Redisson客户端开发的历程,同时也详细介绍了Redi ...
- Redis 客户端源码分析+实现
前言 小编也是从别处学到的,在这里做备忘,也会不断的补充,主要内容:普通jedis , 分布式代理,java 实现 redis 哨兵模式. 依赖: <dependency><grou ...
- 功能强大的 C++ redis 客户端库增加至 acl 项目中
虽然 redis 开发库已有不少,但 C/C++ 的客户端库好用的并不多,虽然官方也提供了 C 版的客户端库,但易用性较差,而且不支持连接池功能,相对于 C/C++ 的库,JAVA 版的 jedis ...
- 几款开源的图形化Redis客户端管理软件推荐
几款开源的图形化Redis客户端管理软件推荐 摘要: Redis是一个超精简的基于内存的键值对数据库(key-value),一般对并发有一定要求的应用都用其储存session,乃至整个数据库.不过它公 ...
- java redis 命令_命令界面:使用Java中的动态API处理Redis
java redis 命令 Redis是一个数据存储,支持190多个文档化命令和450多个命令排列. 社区积极支持Redis开发: 每个主要的Redis版本都附带新命令. 今年,Redis向第三方供应 ...
最新文章
- crank storyboard学习笔记(一)环境安装
- MyBatis3: There is no getter for property named 'code' in 'class java.lang.String'
- R语言笔记-sample()函数
- 等比数列求和python_python numpy生成等差数列、等比数列的实例
- python学习高级篇(part2)--类方法,静态方法,访问控制
- 电子相册系统(一)Dao的组件设计
- 19. 网购秒杀系统架构分析
- win7系统添加wifi连接到服务器,win7系统设置域账号连接企业内部域wifi的具体方法...
- JMETER使用CURL导入功能
- Quartz 表达式生成器
- baidumap api MySQL_百度地图API
- 威联通NAS TS-453Bmini配置docker.redis5.0.5自动加载配置
- Android开发AndroidStudio与eclipse安装与使用
- PCIE switch 连接绿联SSD
- 解决某物流企业二维码打印问题
- 转铁蛋白Tf功能化β-榄香烯-雷公藤红素/紫杉醇PLGA纳米粒/雷公藤甲素脂质体(化学试剂)
- I。quadratic equation 山东第八届省赛
- 关于开启VIM的Python支持
- 大数据Kudu(十一):ClickHouse与Kudu对比
- 阻塞状态和等待状态的区别
热门文章
- Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)
- 大数据-spark-hbase-hive等学习视频资料
- TLS/HTTPS 证书生成与验证
- BZOJ 2190: [SDOI2008]仪仗队
- Linux RSS/RPS/RFS/XPS对比
- FileUpload生成图片水印,文字水印(转载)
- 【组队学习】【33期】数据可视化(Matplotlib)
- 对数变换的三种实现方法
- 如何使用 Python 隐藏图像中的数据
- 基于 Python 环境搭建 - YOLO 实现吸烟行为监测