Heim  >  Artikel  >  Datenbank  >  So verwenden Sie den zentralisierten Cache von Redis in Spring Boot

So verwenden Sie den zentralisierten Cache von Redis in Spring Boot

PHPz
PHPznach vorne
2023-05-26 10:49:051460Durchsuche

Probieren Sie es selbst aus

Definition der Benutzerentität

@Entity @Daten @NoArgsConstructor öffentliche Klasse User implementiert Serializable {

@Id
    @GeneratedValue
    private Long id;


    private String name;
    private Integer age;


    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

Datenzugriffsimplementierung der User-Entität (deckt Cache-Anmerkungen ab)

@CacheConfig(cacheNames = "users") öffentliche Schnittstelle UserRepository erweitert JpaRepository Abhängigkeit:

org.springframework.boot spring-boot-starter-data-redis

@Cacheable
    User findByName(String name);


}

In früheren Versionen von Spring Boot 1.x war der Name dieser Abhängigkeit spring-boot-starter-redis, also in >Spring Boot 1.xDas grundlegende Tutorial unterscheidet sich von hier.

Schritt 2: Fügen Sie der Konfigurationsdatei Konfigurationsinformationen hinzu, nehmen Sie den lokalen Betrieb als Beispiel, zum Beispiel: pom.xml中增加相关依赖:

org.springframework.boot spring-boot-starter-data-redis

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

Spring Boot 1.x的早期版本中,该依赖的名称为spring-boot-starter-redis,所以在Spring Boot 1.x基础教程中与这里不同。

第二步:配置文件中增加配置信息,以本地运行为例,比如:

spring.redis.host=localhost spring.redis.port=6379 spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-wait=-1ms spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.shutdown-timeout=100ms

关于连接池的配置,需要注意:

Redis的连接池配置在 1.x 版本中前缀为spring.redis.poolSpring Boot 2.x有所不同。在 1.x 版本中采用jedis作为连接池,而在 2.x 版本中采用了lettuce作为连接池以上配置均为默认值,实际上生产需进一步根据部署情况与业务要求做适当修改.

再来试试单元测试:

@Slf4j @RunWith(SpringRunner.class) @SpringBootTest public class Chapter54ApplicationTests {

@Autowired
    private UserRepository userRepository;


    @Autowired
    private CacheManager cacheManager;


    @Test
    public void test() throws Exception {
        System.out.println("CacheManager type : " + cacheManager.getClass());


        // 创建1条记录
        userRepository.save(new User("AAA", 10));


        User u1 = userRepository.findByName("AAA");
        System.out.println("第一次查询:" + u1.getAge());


        User u2 = userRepository.findByName("AAA");
        System.out.println("第二次查询:" + u2.getAge());
    }


}

执行测试输出可以得到:

CacheManager type : class org.springframework.data.redis.cache.RedisCacheManager Hibernate: select next_val as id_val from hibernate_sequence for update Hibernate: update hibernate_sequence set next_val= ? where nextval=? Hibernate: insert into user (age, name, id) values (?, ?, ?) 2020-08-12 16:25:26.954  INFO 68282 --- [           main] io.lettuce.core.EpollProvider            : Starting without optional epoll library 2020-08-12 16:25:26.955  INFO 68282 --- [           main] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library Hibernate: select user0.id as id10, user0_.age as age20, user0_.name as name30 from user user0 where user0.name=? 第一次查询:10 第二次查询:10

(推荐微课:Spring微课)

可以看到:

  1. 第一行输出的CacheManager typeorg.springframework.data.redis.cache.RedisCacheManager,而不是上一篇中的EhCacheCacheManager

    spring.redis.host=localhost spring.redis.port=6379 spring.redis.lettuce.pool.max-idle=8 spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-wait=-1ms spring.redis.lettuce.pool.min-idle=0 spring.redis.lettuce.shutdown-timeout=100ms
  2. Bezüglich der Konfiguration des Verbindungspools beachten Sie bitte:

    Der Verbindungspoolkonfiguration von Redis wird in der Version spring.redis vorangestellt 1.x .pool unterscheidet sich von Spring Boot 2.x. In Version 1.x wird jedis als Verbindungspool verwendet, während in Version 2.x lettuce als Verbindungspool verwendet wird. Die oben genannten Konfigurationen sind allesamt Standardwerte . Tatsächlich muss die Produktion je nach Bereitstellungssituation und Geschäftsanforderungen weitere entsprechende Änderungen vornehmen @RunWith(SpringRunner.class) @SpringBootTest öffentliche Klasse Kapitel 54ApplicationTests {
  3. rrreee
Das Ausführen der Testausgabe kann Folgendes erhalten:🎜🎜CacheManager-Typ: Klasse org.springframework.data.redis.cache.RedisCacheManager Ruhezustand: Wählen Sie next_val als id_val aus hibernate_sequence für die Aktualisierung aus Hibernate: hibernate_sequence set next_val= ? where nextval=? Ruhezustand: In Benutzerwerte (Alter, Name, ID) einfügen (?, ?, ?) 2020-08-12 16:25:26.954 INFO 68282 --- [ main] io.lettuce.core.EpollProvider: Start ohne optionale Epoll-Bibliothek 2020-08-12 16:25:26.955 INFO 68282 --- [ main] io.lettuce.core.KqueueProvider: Start ohne optionale kqueue-Bibliothek Ruhezustand: Wählen Sie user0.id als id10, user0_.age als age20, user0_.name als name30 vom Benutzer aus user0 wobei user0.name=? Erste Abfrage: 10 Zweite Abfrage: 10🎜🎜(empfohlene Mikroklasse: Spring-Mikroklasse)🎜🎜Sie können sehen: 🎜
    🎜🎜CacheManager-Typ in der ersten Zeile der Ausgabe code> ist <code>org.springframework.data.redis.cache.RedisCacheManager, nicht der EhCacheCacheManager im vorherigen Artikel🎜🎜🎜🎜Wenn ich es zum zweiten Mal abfrage, da Gibt die SQL-Anweisung nicht aus, daher wird sie aus dem Cache abgerufen🎜🎜🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den zentralisierten Cache von Redis in Spring Boot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen