Rumah >pangkalan data >Redis >Bagaimana SpringBoot menyepadukan Druid dan Redis
Sebahagian besar program Java perlu mengendalikan pangkalan data untuk meningkatkan prestasi, apabila mengendalikan pangkalan data, anda perlu menggunakan kolam sambungan pangkalan data.
Druid ialah pelaksanaan kumpulan sambungan pangkalan data pada platform sumber terbuka Alibaba Ia menggabungkan kelebihan kumpulan DB seperti C3P0 dan DBCP, dan juga menambah pemantauan log.
Druid ialah kumpulan sambungan pangkalan data yang direka untuk pemantauan, yang boleh memantau status sambungan kumpulan sambungan pangkalan data dan status pelaksanaan SQL dengan berkesan.
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency>
server: port: 8080 spring: datasource: druid: url: jdbc:mysql://localhost:3306/eshop?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true username: xxx password: xxx driver-class-name: com.mysql.cj.jdbc.Driver initial-size: 10 max-active: 20 min-idle: 10 max-wait: 60000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 stat-view-servlet: enabled: true login-username: admin login-password: 1234 logging: level: com.wyy.spring.Dao: debug
Uji untuk melihat sama ada ia berjaya!
package com.wyy.spring; import com.wyy.spring.Dao.StudentMapper; import com.wyy.spring.service.StudentService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import javax.sql.DataSource; @SpringBootTest class SpringBoot04ApplicationTests { @Autowired DataSource dataSource; @Test void contextLoads() { System.out.println(dataSource.getClass()); } }
Cetak hasil
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
redis: database: 0 host: 120.0.0.0 port: 6379 password: xxxx jedis: pool: max-active: 8 max-wait: -1 max-idle: 8 min-idle: 0 timeout: 10000
package com.wyy.spring.conf; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; 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.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.util.ClassUtils; import java.lang.reflect.Array; import java.lang.reflect.Method; import java.time.Duration; @Configuration @EnableCaching public class RedisConfiguration extends CachingConfigurerSupport { @Bean @Primary /** * 缓存管理器 */ CacheManager cacheManager(RedisConnectionFactory factory) { RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .computePrefixWith(cacheName -> cacheName + ":-cache-:") /*设置缓存过期时间*/ .entryTtl(Duration.ofHours(1)) /*禁用缓存空值,不缓存null校验*/ .disableCachingNullValues() /*设置CacheManager的值序列化方式为json序列化,可使用加入@Class属性*/ .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( new GenericJackson2JsonRedisSerializer() )); /*使用RedisCacheConfiguration创建RedisCacheManager*/ RedisCacheManager manager = RedisCacheManager.builder(factory) .cacheDefaults(cacheConfiguration) .build(); return manager; } public RedisTemplate redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>(); redisTemplate.setConnectionFactory(factory); RedisSerializer stringSerializer = new StringRedisSerializer(); /* key序列化 */ redisTemplate.setKeySerializer(stringSerializer); /* value序列化 */ redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); /* Hash key序列化 */ redisTemplate.setHashKeySerializer(stringSerializer); /* Hash value序列化 */ redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.afterPropertiesSet(); return redisTemplate; @Override public KeyGenerator keyGenerator() { return (Object target, Method method, Object... params) -> { final int NO_PARAM_KEY = 0; final int NULL_PARAM_KEY = 53; StringBuilder key = new StringBuilder(); /* Class.Method: */ key.append(target.getClass().getSimpleName()) .append(".") .append(method.getName()) .append(":"); if (params.length == 0) { return key.append(NO_PARAM_KEY).toString(); } int count = 0; for (Object param : params) { /* 参数之间用,进行分隔 */ if (0 != count) { key.append(','); } if (param == null) { key.append(NULL_PARAM_KEY); } else if (ClassUtils.isPrimitiveArray(param.getClass())) { int length = Array.getLength(param); for (int i = 0; i < length; i++) { key.append(Array.get(param, i)); key.append(','); } } else if (ClassUtils.isPrimitiveOrWrapper(param.getClass()) || param instanceof String) { key.append(param); } else { /*JavaBean一定要重写hashCode和equals*/ key.append(param.hashCode()); count++; return key.toString(); }; }
@CacheConfig Anotasi peringkat kelas yang membenarkan perkongsian cacheNames, KeyGenerator, CacheManager dan CacheResolver
@Cacheable Used untuk mengisytiharkan bahawa kaedah boleh disimpan dalam cache. Cache keputusan kaedah yang dilaksanakan supaya panggilan berikutnya dengan parameter yang sama tidak perlu melaksanakan kaedah sebenar lagi. Dapatkan nilai terus daripada cache
Kaedah yang ditandakan dengan @CachePut tidak akan menyemak sama ada terdapat hasil yang dilaksanakan sebelum ini dalam cache sebelum pelaksanaan sebaliknya, kaedah akan dilaksanakan setiap kali dan hasil pelaksanaan akan dinyatakan sebagai nilai kunci Borang yang betul disimpan dalam cache yang ditentukan.
Fungsi @CacheEvict terutamanya untuk konfigurasi kaedah, yang boleh mengosongkan cache mengikut syarat tertentu
Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan Druid dan Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!