1.依存関係の紹介
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
2.redis 構成クラスを作成する
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
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);
template.setConnectionFactory(factory);
//key序列化方式
template.setKeySerializer(redisSerializer);
//value序列化
template.setValueSerializer(jackson2JsonRedisSerializer);
//value hashmap序列化
template.setHashValueSerializer(jackson2JsonRedisSerializer);
return template;
}
@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))
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
.disableCachingNullValues();
RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
.cacheDefaults(config)
.build();
return cacheManager;
}
}
3.redisの基本構成情報を追加する
#insert redis config
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database= 4
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
4. redis キャッシュをインターフェースに追加する
springboot キャッシュ アノテーション
(1) @Cacheable は
返された結果をメソッドに応じてキャッシュし、次のリクエスト時に、キャッシュがあればキャッシュされたデータを直接読み込んで返し、キャッシュが存在しなければメソッドを実行して結果を返します。キャッシュに格納されます。通常、クエリ メソッドで使用されます。.
(2) このアノテーションが付けられた @CachePut
メソッドが毎回実行され、結果が指定されたキャッシュに格納されます。他の方法では、データベースにクエリを実行することなく、キャッシュされたデータを応答キャッシュから直接読み取ることができます。追加する方法で一般的に使用されます。.
(3) @CacheEvict は
このアノテーションを使用して、指定されたキャッシュをクリアします。通常、更新または削除メソッドで使用されます。
キャッシュ アノテーションの使用
たとえば、クエリ操作:
ここでは、効果をテストする便宜上、ビジネス ロジックをコントローラーに直接記述します。
@Autowired
private CrmBannerService crmBannerService;
@GetMapping("/getAllBanner")
@Cacheable(value = "banner",key = "'listTwoBanner'")
@ApiOperation("获取全部轮播图")
public Result<List<CrmBanner>> listAllBanner(){
QueryWrapper<CrmBanner> wrapper = new QueryWrapper<>();
wrapper.last("limit 2");
List<CrmBanner> list = crmBannerService.list(wrapper);
return new ResultUtil<List<CrmBanner>>().setData(list);
}
プログラムを実行すると、フロント エンドがインターフェイス リクエストを開始します。redis管理ツールを開くと、 redis キャッシュ キーの値が「banner::listTwoBanner」であることが
わかります。これは { {value}} スプライシングです。 { {キー}}