• SpringBoot配置第三方专业缓存技术jetcache远程缓存方案和本地缓存方案


    JetCache

    是一个基于 Java 的分布式缓存解决方案,旨在提供高性能和可扩展性。它支持多种后端存储,如 Redis、Hazelcast、Tair 等,可以作为应用程序的缓存层,有效地提升数据访问性能和响应速度。

    JetCache 的主要特点包括:

    1. 多种后端支持:可以根据需求选择不同的后端存储,如 Redis、Hazelcast 等,灵活适配不同的应用场景。

    2. 注解驱动:提供注解方式简化缓存的配置和使用,使得开发者能够轻松地在业务逻辑中加入缓存支持,减少手动编码工作。

    3. 二级缓存支持:支持二级缓存,允许在内存缓存和分布式缓存之间进行数据的存取,有效平衡性能和一致性要求。

    4. 缓存预热和失效策略:提供缓存预热功能,支持多种失效策略,如基于时间、基于数量、基于引用等。

    5. 高性能和可扩展性:设计上考虑了并发访问和数据一致性问题,以支持高并发和大规模应用场景。

    JetCache 在企业级 Java 应用中广泛应用,帮助开发者通过简单的配置和注解,轻松地实现缓存管理,提升系统整体性能和响应速度。

    jetcache远程缓存方案

    我们之前的缓存控制台过于松散

    JetCache 提供了多种远程缓存方案,主要基于不同的后端存储来实现分布式缓存的功能。以下是 JetCache 支持的一些主要远程缓存方案:

    1. Redis:Redis 是 JetCache 的主要后端之一,它提供了高性能的内存存储和持久化功能,适用于需要快速访问和高并发的场景。JetCache 可以通过 Redis 实现分布式缓存,支持多种缓存操作和数据结构。

    2. Hazelcast:Hazelcast 是一个开源的分布式内存数据网格,JetCache 可以利用 Hazelcast 来实现分布式缓存,支持分布式数据结构和集群管理,适合需要低延迟和高可用性的场景。

    3. Tair:Tair 是阿里云提供的分布式缓存服务,JetCache 支持通过 Tair 实现远程缓存,具有良好的可扩展性和高性能,适合在阿里云环境中构建应用。

    4. Caffeine:虽然 Caffeine 本身是一个本地缓存库,但 JetCache 也支持将其配置为远程缓存方案。在分布式应用场景中,可以通过 Caffeine 来实现基于内存的快速缓存,同时可以与其他远程缓存方案结合使用。

    这些远程缓存方案使得开发者可以根据应用的需求选择合适的后端存储,利用 JetCache 提供的注解驱动和简化配置来管理分布式缓存,提升应用的性能和可扩展性。

    本地方案

    我们用的是ehcache

    远程方案

    我们使用的redis memcached

    我们手动配置服务器IP地址和端口

    但是我们还没有遇到

    既能用远程缓存方案又能用本地缓存方案的

    我们接下来要学习的jetcache就是

    两种缓存方案都能用的

    我们启动

    我们在业务层接口的实现类里面没有用缓存技术

    1. package com.example.demo.service.impl;
    2. import com.example.demo.domain.SMSCode;
    3. import com.example.demo.service.SMSCodeService;
    4. import com.example.demo.utils.CodeUtils;
    5. import net.rubyeye.xmemcached.MemcachedClient;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.cache.annotation.CachePut;
    8. import org.springframework.cache.annotation.Cacheable;
    9. import org.springframework.stereotype.Service;
    10. @Service
    11. public class SMSCodeServiceImpl implements SMSCodeService {
    12. @Autowired
    13. private CodeUtils codeUtils;
    14. @Override
    15. public String sendCodeToSMS(String tele) {
    16. String code=codeUtils.generator(tele);
    17. return code;
    18. }
    19. @Override
    20. public boolean checkCode(SMSCode smsCode) {
    21. String code=null;
    22. return smsCode.getCode().equals(code);
    23. }
    24. }

    我们把缓存都拿掉了

    没有任何缓存

    我们回忆之前的操作

    记得好像是要加入各种坐标

    1. <!-- jetcache缓存-->
    2. <dependency>
    3. <groupId>com.alicp.jetcache</groupId>
    4. <artifactId>jetcache-starter-redis</artifactId>
    5. <version>2.6.2</version>
    6. </dependency>

    接着配置

    远程存储 我们选择的是redis存储

    1. jetcache:
    2. remote:
    3. default:
    4. type: redis
    5. host: localhost
    6. port: 6379
    7. poolConfig:
    8. maxTotal: 50

    导入完毕

    我们就可以进行使用了

    启用使用注解的方式使用缓存

    1. //开启缓存
    2. @EnableCreateCacheAnnotation

    这就代表我们可以用注解开启缓存

    接下来我们来到业务层的实现类使用缓存

    我们直接使用注解创建一个缓存

    第一个参数是缓存名

    第二个参数是过期时间 是设置缓存的过期时间

    之前的过期时间是到处写 但是这里我们进行了一个统一

    1. @CreateCache(name="jetCatch",expire = 3600,timeUnit = TimeUnit.SECONDS)
    2. private Cache<String , String> jetCache;

    1. package com.example.demo.service.impl;
    2. import com.alicp.jetcache.Cache;
    3. import com.alicp.jetcache.anno.CreateCache;
    4. import com.example.demo.domain.SMSCode;
    5. import com.example.demo.service.SMSCodeService;
    6. import com.example.demo.utils.CodeUtils;
    7. import net.rubyeye.xmemcached.MemcachedClient;
    8. import org.springframework.beans.factory.annotation.Autowired;
    9. import org.springframework.cache.annotation.CachePut;
    10. import org.springframework.cache.annotation.Cacheable;
    11. import org.springframework.stereotype.Service;
    12. import java.util.concurrent.TimeUnit;
    13. @Service
    14. public class SMSCodeServiceImpl implements SMSCodeService {
    15. @Autowired
    16. private CodeUtils codeUtils;
    17. //声明缓存空间
    18. @CreateCache(name="jetCatch",expire = 3600,timeUnit = TimeUnit.SECONDS)
    19. private Cache<String , String> jetCache;
    20. @Override
    21. public String sendCodeToSMS(String tele) {
    22. String code=codeUtils.generator(tele);
    23. //放入缓存
    24. jetCache.PUT(tele,code);
    25. return code;
    26. }
    27. @Override
    28. public boolean checkCode(SMSCode smsCode) {
    29. //取出缓存
    30. String code=jetCache.get(smsCode.getTele());
    31. return smsCode.getCode().equals(code);
    32. }
    33. }

    启动项目

    启动成功

    用postman进行测试

    测试成功

    恭喜

    我们同样可以使用单独的配置

    加上一个area属性即可

    jetcache本地缓存方案

    本地缓存方案与远程缓存方案一样

    有默认设定还有自定义设置

    但是我们在设置本地缓存的时候要设置键缓存

    指定键转化为字符串的工具

    查看maven工程的依赖

    我们发现默认导入了一个依赖

    fastjson

    1. jetcache:
    2. local:
    3. default:
    4. type: linkedhashmap
    5. keyConvertor: fastjson

    我们在业务层的实现类里面也要进行修改

    1. //声明缓存空间
    2. @CreateCache(name = "jetCache_",expire = 3600,timeUnit = TimeUnit.SECONDS)
    3. private Cache<String , String> jetCache;

    我们启动

    查看信息

    发现我们的配置的东西都有显示

    设置缓存为本地缓存方案

    1. //声明缓存空间
    2. @CreateCache(name = "jetCache_",expire = 3600,timeUnit = TimeUnit.SECONDS,cacheType = CacheType.LOCAL)
    3. private Cache<String , String> jetCache;

    本地缓存和远程缓存时共存的

    我们可以选择本地缓存的方案和远程的方案

    个人号推广

    博客主页

    多多!-CSDN博客

    Web后端开发

    https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482

    Web前端开发

    https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482

    数据库开发

    https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482

    项目实战

    https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482

    算法与数据结构

    https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482

    计算机基础

    https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482

    回忆录

    https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482

  • 相关阅读:
    【C++】-- AVL树详解
    性能优化 之 温度与电量
    JavaScript 数据类型及其用法
    DHorse v1.4.0 发布,基于 k8s 的发布平台
    第四篇Android--TextView使用详解
    【pytorch06】 维度变换
    Jmeter插件技术:性能测试中服务端资源监控
    OpenCV实战(1)——OpenCV与图像处理基础
    Android APT
    ISIS多区域实验简述
  • 原文地址:https://blog.csdn.net/qq_30500575/article/details/139749658