网站首页 > java教程 正文
本地缓存是提高Redis等数据库性能的最有用的策略之一。希望在Java中进行本地缓存的Redis开发人员会发现Redis不支持这一功能。
在本文中,我们将讨论如何使用第三方redis java客户机利用java和redis中的本地缓存
什么是本地缓存?
缓存是内存缓冲区,用于将数据存储在一个方便的位置,以便以后对该数据的请求能够更快地执行。
在本地缓存中,数据库中最常用的数据在物理上存储在离访问它的应用程序更近的地方,存储库称为本地缓存...例如,如果应用程序运行在经常访问数据库服务器的客户端上,本地缓存可能存储在客户机自己的硬盘上,从而消除了网络延迟
通过在本地缓存中更接近地存储数据,可以显着地加快响应时间并减少网络流量;但是,还需要小心地处理本地缓存,以确保本地缓存中存储的数据与原始数据库中的数据保持一致。
用Java在Redis中进行本地缓存
开发人员可以很容易地实现本地内存。Java中的缓存,无论是使用内置Java数据结构(如HashMaps)还是使用第三方Java库。
当开发人员希望在Redis中使用这些本地缓存特性时,问题就出现了,因为Redis并不自动支持Java编程语言的使用。
幸运的是,有一个简单的解决方案:开发人员可以在Redis项目中使用第三方Java框架(如redisson)。Redisson是Redis的Java客户端,它提供了数十个分布式Java对象和服务。这使得熟悉标准Java类和接口的开发人员更容易使用Redis学习曲线。
在接下来的几节中,我们将讨论开发人员可以使用Redisson在Redis中实现Java本地缓存的几种方法。
在带有地图的Redis和Java中进行本地缓存
Java中的映射表示键值对之间的映射;它们是在Java中实现本地缓存的最简单方法之一。
Redisson中的RLocalCachedMap接口扩展了Java的内置ConcurrentMap接口,包括对Redis中的本地缓存的支持。此本地缓存使应用程序能够执行比正常速度快45倍的读取操作。
用户可以配置以下RLocalCachedMap功能:
- 最大缓存大小。
- 每个缓存条目的存活时间。
- 每个缓存条目的最大空闲时间。
- 缓存项的驱逐策略。
- 缓存更改的同步策略。
下面是如何在Redisson中使用RLocalCachedMap的示例:
?RLocalCachedMap<String, Integer> map = redisson.getLocalCachedMap("test", LocalCachedMapOptions.defaults());???String prevObject = map.put("123", 1);?String currentObject = map.putIfAbsent("323", 2);?String obj = map.remove("123");???// use fast* methods when previous value is not required?map.fastPut("a", 1);?map.fastPutIfAbsent("d", 32);?map.fastRemove("b");???RFuture<String> putAsyncFuture = map.putAsync("321");?RFuture<Void> fastPutAsyncFuture = map.fastPutAsync("321");???map.fastPutAsync("321", new SomeObject());?map.fastRemoveAsync("321");?
如果RLocalCachedMap不再使用,建议显式销毁该映射;但是,如果Redisson关闭,则这一点并不是绝对必要的:
?RLocalCachedMap<String, Integer> map = ...?map.destroy();?
使用SpringCache的Redis和Java本地缓存
Redisson还支持用于本地缓存的三个第三方Java框架:弹簧缓存、Hibernate缓存和JCache。
Spring与Redisson框架完全兼容,Redisson通过RedissonSpringLocalCachedCacheManager类支持SpringCache。用户可以配置以下功能:
- 最大缓存大小。
- 每个缓存条目的存活时间。
- 每个缓存条目的最大空闲时间。
- 重新连接策略。
- 缓存更改的同步策略。
下面是如何在Redisson中配置Spring缓存的示例:
? @Configuration? @ComponentScan? @EnableCaching? public static class Application {??? @Bean(destroyMethod="shutdown")? RedissonClient redisson() throws IOException {? Config config = new Config();? config.useClusterServers()? .addNodeAddress("redis://127.0.0.1:7004", "redis://127.0.0.1:7001");? return Redisson.create(config);? }??? @Bean? CacheManager cacheManager(RedissonClient redissonClient) {? Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();??? // define local cache settings for "testMap" cache.? // ttl = 48 minutes and maxIdleTime = 24 minutes for local cache entries? LocalCachedMapOptions options = LocalCachedMapOptions.defaults()? .evictionPolicy(EvictionPolicy.LFU)? .timeToLive(48, TimeUnit.MINUTES)? .maxIdle(24, TimeUnit.MINUTES);? .cacheSize(1000);??? // create "testMap" Redis cache with ttl = 24 minutes and maxIdleTime = 12 minutes? config.put("testMap", new LocalCachedCacheConfig(24*60*1000, 12*60*1000, options));? return new RedissonSpringLocalCachedCacheManager(redissonClient, config);? }??? }?
使用Hibernate缓存的Redis和Java本地缓存
Hibernate缓存是Redisson中的第二个第三方Java本地缓存选项。Hibernate中的缓存是通过RedissonLocalCachedRegionFactory类在Redisson中完成的。用户可以配置以下功能:
- 最大缓存大小。
- 每个缓存条目的存活时间。
- 每个缓存条目的最大空闲时间。
- 缓存项的驱逐策略。
- 重新连接策略。
- 缓存更改的同步策略。
要了解有关使用Redisson在Redis中实现Hibernate缓存的更多信息,请参阅“使用Redis在Hibernate中缓存".
在带有JCache的Redis和Java中进行本地缓存
最后,还可以使用Redisson和JCache在Redis中执行Java本地缓存。配置缓存是通过LocalCacheConfiguration类在JCache实例初始化期间完成的。用户可以配置以下功能:
- 最大缓存大小。
- 每个缓存条目的存活时间。
- 每个缓存条目的最大空闲时间。
- 缓存项的驱逐策略。
- 重新连接策略。
- 缓存更改的同步策略。
下面是如何使用JCache和Redisson初始化Java本地缓存的示例:
?LocalCacheConfiguration<String, String> config = new LocalCacheConfiguration<>();???CacheManager manager = Caching.getCachingProvider().getCacheManager();?Cache<String, String> cache = manager.createCache("myCache", config);???// or???URI redissonConfigUri = getClass().getResource("redisson-jcache.yaml").toURI();?CacheManager manager = Caching.getCachingProvider().getCacheManager(redissonConfigUri, null);?Cache<String, String> cache = manager.createCache("myCache", config);???// or ???Config redissonCfg = ...?Configuration<String, String> rConfig = RedissonConfiguration.fromConfig(redissonCfg, config);???CacheManager manager = Caching.getCachingProvider().getCacheManager();?Cache<String, String> cache = manager.createCache("namedCache", rConfig);?
结语
Redisson为Java开发人员在Redis中执行本地缓存提供了多种选项:map、SpringCache、Hibernate缓存和JCache。
请注意,最后三个选项--Spring缓存、Hibernate缓存和JCache--仅供Redisson专业用户使用。Redisson Pro包括各种特性和性能增强,使其有别于Redisson的开源版本。这包括集群模式下的数据分区、XA事务、多线程应用程序的超高速速度和24x7支持。
要了解更多关于Redissonpro的好处,包括本地缓存,请立即与Redisson团队联系。
猜你喜欢
- 2024-10-25 Caffeine高性能本地缓存框架初探(caffeine缓存原理)
- 2024-10-25 Redis学习3——Redis应用之缓存(redis的缓存的使用方式)
- 2024-10-25 Java高级——缓存的使用场景(java缓存机制)
- 2024-10-25 java中常用的几种缓存类型介绍(java常用缓存技术)
- 2024-10-25 本地缓存之王caffeine#代码(本地缓存 js)
- 2024-10-25 skywalking agent 本地缓存队列参数设置
- 2024-10-25 史上最实用的:分布式缓存方案(分布式缓存设计方案)
- 2024-10-25 使用Guava作为本地缓存让系统飞起来
- 2024-10-25 深究分布式缓存的九个点(分布式缓存技术有哪些)
- 2024-10-25 面试题之java缓存总结,从单机缓存到分布式缓存架构
你 发表评论:
欢迎- 最近发表
-
- 五,网络安全IDA Pro反汇编工具初识及逆向工程解密实战
- 「JAVA8」- Lambda 表达式(java lambda表达式原理)
- 深入探讨Java代码保护:虚拟机保护技术的新时代
- Nginx反向代理原理详解(图文全面总结)
- 逆向拆解日本IT,哪些Java技术栈薪资溢价高
- mybatis 逆向工程使用姿势不对,把表清空了,心里慌的一比
- Spring Boot集成ProGuard轻松实现Java 代码混淆, Java 应用固若金汤
- 从 Java 代码逆向工程生成 UML 类图和序列图
- 人与人相处:尊重是标配,靠谱是高配,厚道是顶配
- Windows系统安装日期如何修改(windows10怎么修改安装日期)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)