Heim > Datenbank > Redis > Wie SpringBoot Druid und Redis integriert

Wie SpringBoot Druid und Redis integriert

王林
Freigeben: 2023-05-31 22:31:18
nach vorne
1093 Leute haben es durchsucht

1. Druid integrieren

1.1 Einführung in Druid

Ein großer Teil der Java-Programme muss die Datenbank betreiben, um die Leistung zu verbessern.

Druid ist eine Datenbankverbindungspool-Implementierung auf der Open-Source-Plattform von Alibaba. Sie kombiniert die Vorteile von DB-Pools wie C3P0 und DBCP und bietet außerdem Protokollüberwachung.

Druid ist ein für die Überwachung konzipierter Datenbankverbindungspool, der den Verbindungsstatus des Datenbankverbindungspools und den SQL-Ausführungsstatus effektiv überwachen kann.

1.2 Druid-Datenquellenabhängigkeit hinzufügen

1

2

3

4

5

<dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>druid-spring-boot-starter</artifactId>

            <version>1.2.8</version>

        </dependency>

Nach dem Login kopieren

1.3 Druid-Datenquelle verwenden

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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

Nach dem Login kopieren

Testen Sie, ob es erfolgreich ist!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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());

    }

}

Nach dem Login kopieren

Druckergebnisse

Wie SpringBoot Druid und Redis integriert

2. Redis integrieren

2.1 Redis-Abhängigkeit hinzufügen

1

2

3

4

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-data-redis</artifactId>

        </dependency>

Nach dem Login kopieren

2.2yml Redis-Konfigurationsinformationen hinzufügen

1

2

3

4

5

6

7

8

9

10

11

12

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

Nach dem Login kopieren

2.3 Redis-Konfigurationsklasse

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

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(&#39;,&#39;);

                }

                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(&#39;,&#39;);

                    }

                } else if (ClassUtils.isPrimitiveOrWrapper(param.getClass()) || param instanceof String) {

                    key.append(param);

                } else {

                    /*JavaBean一定要重写hashCode和equals*/

                    key.append(param.hashCode());

                count++;

            return key.toString();

        };

}

Nach dem Login kopieren

@CacheKonfigurieren Sie Anmerkungen auf Klassenebene und erlauben Sie den gemeinsamen Cache CacheNames, KeyGenerator, CacheManager und CacheResolver

@Cacheable wird verwendet, um zu deklarieren, dass die Methode zwischenspeicherbar ist. Zwischenspeichern Sie die Ergebnisse einer ausgeführten Methode, sodass nachfolgende Aufrufe mit denselben Parametern die eigentliche Methode nicht erneut ausführen müssen. Holen Sie sich den Wert direkt aus dem Cache

Die mit @CachePut markierte Methode prüft vor der Ausführung nicht, ob zuvor ausgeführte Ergebnisse im Cache vorhanden sind. Stattdessen wird die Methode jedes Mal ausgeführt und die Ausführungsergebnisse in Form von gespeichert Schlüssel-Wert-Paare in den angegebenen Cache.

Die Funktion von @CacheEvict dient hauptsächlich der Methodenkonfiguration, die den Cache unter bestimmten Bedingungen leeren kann

Das obige ist der detaillierte Inhalt vonWie SpringBoot Druid und Redis integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage