Rumah >pangkalan data >Redis >Cara menggunakan anotasi untuk melaksanakan fungsi caching Redis
Sistem storan kunci dan nilai yang ditulis dalam bahasa C (berbeza daripada storan jadual dua dimensi MySQL.)
rdb: kegigihan berkala
aof: tambah dalam bentuk log
RDB didayakan secara lalai, dan aof didayakan pada masa yang sama
Jenis data: rentetan, senarai, set, zset, cincang,
storan borang bitMaps, longitud geospatial dan latitud. taip.. .
Urut tunggal: Gunakan pemultipleksan io berbilang untuk mencapai konkurensi tinggi
Tambah kebergantungan
<!-- 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>
Buat kelas konfigurasi dengan kaedah penulisan tetap
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; } }
Tambah maklumat konfigurasi
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
Gunakan anotasi untuk melaksanakan fungsi
Cache@ Cacheable
cache hasil yang dikembalikan oleh kaedah Pada permintaan seterusnya, jika cache wujud, data cache akan terus dibaca dan dikembalikan jika cache tidak wujud dilaksanakan dan hasil yang dikembalikan akan disimpan dalam cache. Biasanya digunakan dalam kaedah pertanyaan.
Cache @CachePut
Setiap kali kaedah yang ditandakan dengan anotasi ini dilaksanakan, hasilnya akan disimpan dalam cache yang ditentukan. Data boleh dibaca terus dari cache respons tanpa perlu mengakses pangkalan data. Biasanya digunakan untuk menambah kaedah baru.
Cache @CacheEvict
Menggunakan bendera anotasi ini akan mengosongkan cache yang ditentukan. Biasanya digunakan dalam kaedah kemas kini atau padam
anotasi impl perkhidmatan yang dikembalikan Apabila kunci tidak ditetapkan, parameter akan ditambahkan secara automatik sebagai kunci
@Cacheable(value = "dict", key = "'selectIndexList'+#id")
Atas ialah kandungan terperinci Cara menggunakan anotasi untuk melaksanakan fungsi caching Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!