Memandangkan kamus data tidak berubah dengan kerap, dan sistem mengakses kamus data dengan lebih kerap, adalah perlu untuk kami menyimpan data dalam kamus data ke dalam cache untuk mengurangkan tekanan pangkalan data dan meningkatkan kelajuan akses. Di sini, kami menggunakan Redis sebagai perisian tengah cache sistem yang diedarkan.
Dalam projek Spring Boot, Spring Data Redis disepadukan secara lalai menyediakan templat operasi yang sangat mudah untuk Redis, RedisTemplate, dan boleh mengurus kumpulan sambungan secara automatik .
Tambahkan pergantungan redis dalam modul Spring Boot 2.0 dan ke atas kumpulan sambungan commons-pool2 secara lalai
<!-- spring boot redis缓存引入 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 缓存连接池--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <!-- redis 存储 json序列化 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency>
Tambah konfigurasi berikut pada application.yml teras perkhidmatan
#spring:
redis:
hos: 192.168.100.100
port: 6379
pangkalan data: 0
kata laluan: 123456 #Lalai kosong
tamat masa: 3000ms #Maksimum masa menunggu dibuang jika tamat masa, jika tidak permintaan akan terus menunggu
salad:
pool:
maks-aktif: 20 #Bilangan maksimum sambungan, nilai negatif bermakna tiada had, lalai ialah 8
maks- tunggu: -1 #Maksimum masa menunggu menyekat, nilai negatif bermakna tiada had, Lalai -1
maks-melahu: 8 #Sambungan melahu maksimum, lalai 8
melahu min: 0 #Sambungan melahu minimum, lalai 0
Sambung dari jauh ke pelayan Linux Di sini, redis pada mesin maya centos digunakan secara tempatan
#Mulakan perkhidmatan.
cd /usr/local/redis-5.0.7
bin/redis- server redis.conf
@SpringBootTest @RunWith(SpringRunner.class) public class RedisTemplateTests { @Resource private RedisTemplate redisTemplate; @Resource private DictMapper dictMapper; @Test public void saveDict(){ Dict dict = dictMapper.selectById(1); //向数据库中存储string类型的键值对, 过期时间5分钟 redisTemplate.opsForValue().set("dict", dict, 5, TimeUnit.MINUTES); } }
< . nilai menggunakan storan json
3 ujian Nilai@Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); //首先解决key的序列化方式 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); redisTemplate.setKeySerializer(stringRedisSerializer); //解决value的序列化方式 Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class); //序列化时将类的数据类型存入json,以便反序列化的时候转换成正确的类型 ObjectMapper objectMapper = new ObjectMapper(); //objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); // 解决jackson2无法反序列化LocalDateTime的问题 objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.registerModule(new JavaTimeModule()); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); return redisTemplate; } }
DictServiceImpl
<. 🎜>Nota: Apabila pelayan redis tidak berfungsi, kita tidak seharusnya membuang pengecualian dan melaksanakannya secara normal Proses berikut membolehkan perniagaan berjalan seperti biasa@Test public void getDict(){ Dict dict = (Dict)redisTemplate.opsForValue().get("dict"); System.out.println(dict); }
Atas ialah kandungan terperinci Analisis kod contoh cache Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!