重学SpringBoot. step4 Redis的应用

Redis的应用

Redis支持的七种数据类型:字符串、散列、列表(链表)、集合、有序集合、基数和地理位置,具体用Java怎么操作其实可以直接看redisTemplate的源代码。

Redis引出来的概念有对象序列化、Redis事务、Redis流水线、Redis消息监听器

对象序列化用于把Java对象直接存储到Redis中

Redis事务,Redis事务的命令不会马上执行,而是会有一个Redis任务队列,将这些任务一步步执行。

监控的数据在一开始就发生了变化,则就不会执行事务。

redis exec命令执行后才能报出错误,后面的命令依旧会被执行。

注解缓存

一般用户是直接通过redisTemplate直接存取用户数据,在我之前的项目中需要有这样的场景,需要给每个数据加上缓存,但问题就是,Redis注解的缓存是会读取脏数据的,也就是数据更新不即时。

SpringBoot Redis给我们提供了两个注解,CachePut,Cacheable,一个更新数据,一个是查询数据。

CachePut将对应的key的值进行修改缓存,Cacheable直接取与对应Key的值就行。

如果数据没有使用CachePut,或者没有手动的更新,那么将可以会出现脏数据的可能,即Redis数据与MySql数据不同步。这个还是非常的危险的

### Spring BootRedis 和 CTG-Cache 的集成教程 在 Spring Boot 项目中同时集成 Redis 和 CTG-Cache 可以为应用程序提供高效的缓存管理和性能优化功能。以下是实现这一目标的关键步骤和技术细节。 #### 1. 添加依赖项 要集成 Redis 和 CTG-Cache,需在项目的 `pom.xml` 文件中添加必要的 Maven 依赖项: ```xml <dependencies> <!-- Spring Data Redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- Jedis Client (or Lettuce as an alternative) --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> <!-- CTG Cache Library --> <dependency> <groupId>com.ctg.cache</groupId> <artifactId>ctg-cache-core</artifactId> <version>{latest-version}</version> </dependency> </dependencies> ``` 上述配置中的 `spring-boot-starter-data-redis` 是用于支持 Redis 缓存的核心库[^2],而 `jedis` 或其他客户端则提供了与 Redis 进行通信的能力。对于 CTG-Cache,应根据官方文档指定最新版本号。 --- #### 2. 配置 Redis 通过创建一个名为 `application.properties` 或 `application.yml` 的文件来定义 Redis 的连接参数: ##### application.properties 示例: ```properties # Redis Configuration spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= spring.redis.database=0 spring.redis.timeout=6000ms ``` 这些属性允许开发者轻松调整 Redis 实例的位置、端口以及超时设置等重要选项。 --- #### 3. 自定义 CTG-Cache 配置类 为了使 CTG-Cache 能够无缝工作,可以编写自定义的 Java 配置类以初始化其上下文环境: ```java import com.ctg.cache.core.CacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class CtgCacheConfig { @Bean public CacheManager cacheManager() { // 初始化并返回 CTG Cache Manager 对象 return new CacheManager(); } } ``` 此代码片段展示了如何利用 Spring 的 Bean 容器机制加载 CTG-Cache 组件实例[^3]。 --- #### 4. 使用双重缓存策略 当需要结合两种不同的缓存技术时,推荐采用分层架构设计模式。例如,在内存级操作优先考虑 Redis,而对于更持久化的存储需求可转向 CTG-Cache。 下面是一个简单的服务方法示例,演示了双缓存逻辑的应用场景: ```java @Service public class DualCacheService { private final StringRedisTemplate redisTemplate; // Redis Template for operations private final CacheManager ctgCacheManager; // CTG Cache Manager instance public DualCacheService(StringRedisTemplate redisTemplate, CacheManager ctgCacheManager) { this.redisTemplate = redisTemplate; this.ctgCacheManager = ctgCacheManager; } public Object getDataFromCaches(String key) { // Step A: Try fetching data from Redis first. ValueOperations<String, String> ops = redisTemplate.opsForValue(); String valueInRedis = ops.get(key); if (valueInRedis != null && !valueInRedis.isEmpty()) { System.out.println("Data found in Redis."); return valueInRedis; } else { System.out.println("No data in Redis, checking CTG Cache..."); // Step B: If not present in Redis, try retrieving it via CTG Cache. Object cachedObject = ctgCacheManager.get(key); if (cachedObject != null) { System.out.println("Data retrieved successfully from CTG Cache."); // Optional step to sync back into Redis for future requests. redisTemplate.opsForValue().set(key, cachedObject.toString()); return cachedObject; } } return null; // No matching entry was located across both caches. } } ``` 该例子说明了如何先查询 Redis 并在其未命中后再尝试访问 CTG-Cache[^1]。 --- #### 5. 测试与验证 完成以上开发后,务必执行单元测试和集成测试以确认整个流程正常运作无误。可以通过模拟不同条件下的请求路径覆盖所有可能的情况。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值