Rumah  >  Artikel  >  pangkalan data  >  Analisis kod contoh cache Redis

Analisis kod contoh cache Redis

王林
王林ke hadapan
2023-06-03 20:37:561451semak imbas

1. Pengenalan

1. Senario

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.

2. RedisTemplate

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 .

2. Pengenalan Redis

1. Integrasikan Redis dalam projek

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>

2. Tambahkan konfigurasi sambungan Redis

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

3. Mulakan perkhidmatan Redis

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

3 Ujian RedisTemplate

1 🎜>

Buat kelas ujian RedisTemplateTests

@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);
    }
}

mendapati bahawa RedisTemplate lalai Kaedah penyiaran JDK digunakan untuk menyimpan kunci dan nilai, yang mempunyai kebolehbacaan yang lemah

Analisis kod contoh cache Redis

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;
    }
}

4 Simpan kamus data dalam redis

Analisis kod contoh cache RedisDictServiceImpl

<.>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);
}

Ringkasan redis bersepadu:

(. 1) Import kebergantungan yang berkaitan;

(2) Konfigurasikan maklumat sambungan redis; serializer mengikut keperluan anda sendiri, jika tidak, serializer jdk akan digunakan secara lalai.

Ringkasan perniagaan Redis:

(1) Pertanyaan pertama sama ada terdapat maklumat cache yang sepadan dalam redis Jika ada, ia akan diambil dan dikembalikan terus tanpa pelaksanaan disambungkan atas sebab tertentu Jika tiada masa henti, cetak log ralat pada masa ini dan teruskan pertanyaan pangkalan data

(2) Jika tidak, tanya pangkalan data, simpan data dalam redis dan kembalikan data.

Atas ialah kandungan terperinci Analisis kod contoh cache Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam