通过注解实现Redis缓存功能

commons-pool2

2.6.0




**创建配置类 固定写法**



package com.lzq.yygh.common;

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.springframework.cache.CacheManager;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.cache.RedisCacheConfiguration;

import org.springframework.data.redis.cache.RedisCacheManager;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.RedisSerializationContext;

import org.springframework.data.redis.serializer.RedisSerializer;

import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.net.UnknownHostException;

import java.time.Duration;

@Configuration

@EnableCaching //开启缓存功能

public class RedisConfig {

/**

  • 设置RedisTemplate规则

  • @param redisConnectionFactory

  • @return

*/

@Bean

public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {

RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

redisTemplate.setConnectionFactory(redisConnectionFactory);

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

//解决查询缓存转换异常的问题

ObjectMapper om = new ObjectMapper();

// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public

 om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等

            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

 jackson2JsonRedisSerializer.setObjectMapper(om);

//序列号key value

 redisTemplate.setKeySerializer(new StringRedisSerializer());

 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

 redisTemplate.setHashKeySerializer(new StringRedisSerializer());

 redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

 redisTemplate.afterPropertiesSet();

 return redisTemplate;

}

/**

 * 设置CacheManager缓存规则

 * @param factory

 * @return

 */

@Bean

public CacheManager cacheManager(RedisConnectionFactory factory) {

    RedisSerializer<String> redisSerializer = new StringRedisSerializer();

    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

    //解决查询缓存转换异常的问题

    ObjectMapper om = new ObjectMapper();

    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

    jackson2JsonRedisSerializer.setObjectMapper(om);

    // 配置序列化(解决乱码的问题),过期时间600秒

    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()

            .entryTtl(Duration.ofSeconds(600)) //缓存过期10分钟 ---- 业务需求。

            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))//设置key的序列化方式

            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) //设置value的序列化

            .disableCachingNullValues();

    RedisCacheManager cacheManager = RedisCacheManager.builder(factory)

            .cacheDefaults(config)

            .build();

    return cacheManager;

}

}




添加配置信息



spring.redis.host=127.0.0.1

spring.redis.port=6379

spring.redis.database= 0

spring.redis.timeout=1800000

spring.redis.lettuce.pool.max-active=20

spring.redis.lettuce.pool.max-wait=-1

#最大阻塞等待时间(负数表示没限制)

spring.redis.lettuce.pool.max-idle=5

spring.redis.lettuce.pool.min-idle=0




**使用注解实现功能**



> 缓存@Cacheable

> 

> 根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返 回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。一般用在查询方法 上。

> 

> 缓存@CachePut

> 

> 使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直 接从响应的缓存中读取缓存数据,而不需要再去查询数据库。一般用在新增方法上。

> 

> 缓存@CacheEvict

> 

> 使用该注解标志的方法,会清空指定的缓存。一般用在更新或者删除方法上





# Kafka实战笔记

> **关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图**

![image.png](https://img-blog.csdnimg.cn/img_convert/55bc18372a49d917e1e2c4d373aa2ed4.webp?x-oss-process=image/format,png)


*   **Kafka入门**
*   **为什么选择Kafka**
*   **Karka的安装、管理和配置**

![image.png](https://img-blog.csdnimg.cn/img_convert/b5d9c3856b068ea34023acfa30bdd549.webp?x-oss-process=image/format,png)


*   **Kafka的集群**
*   **第一个Kafka程序**
*   ![image.png](https://img-blog.csdnimg.cn/img_convert/fa8eba2059f03810dea370a0f01c04e6.webp?x-oss-process=image/format,png)


afka的生产者

![image.png](https://img-blog.csdnimg.cn/img_convert/42e562f990364204f89fed15e3fa5dca.webp?x-oss-process=image/format,png)

*   **Kafka的消费者**
*   **深入理解Kafka**
*   **可靠的数据传递**

![image.png](https://img-blog.csdnimg.cn/img_convert/1d467983135c3a2d89ba6231d30439e6.webp?x-oss-process=image/format,png)


![image.png](https://img-blog.csdnimg.cn/img_convert/7f032d6302fc7684d1309d0289a5a2fd.webp?x-oss-process=image/format,png)


*   **Spring和Kalka的整合**
*   **Sprinboot和Kafka的整合**
*   **Kafka实战之削峰填谷**
*   **数据管道和流式处理(了解即可)**

![image.png](https://img-blog.csdnimg.cn/img_convert/40ca1444e45f920c9d21dabafce4494a.webp?x-oss-process=image/format,png)


*   **Kafka实战之削峰填谷**

![image.png](https://img-blog.csdnimg.cn/img_convert/631ee00970a823f13aff63a8bf50cf6f.webp?x-oss-process=image/format,png)

4)]


[外链图片转存中...(img-BIe8iYqK-1721201136515)]


*   **Spring和Kalka的整合**
*   **Sprinboot和Kafka的整合**
*   **Kafka实战之削峰填谷**
*   **数据管道和流式处理(了解即可)**

[外链图片转存中...(img-AGMhAJOm-1721201136515)]


*   **Kafka实战之削峰填谷**

[外链图片转存中...(img-5kAV93CK-1721201136515)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值