Maison  >  Article  >  base de données  >  Comment utiliser le cache centralisé Redis dans Spring Boot

Comment utiliser le cache centralisé Redis dans Spring Boot

PHPz
PHPzavant
2023-05-26 10:49:051462parcourir

Essayez-le vous-même

Définition de l'entité utilisateur

@Entité @Données @NoArgsConstructor classe publique L'utilisateur implémente Serialisable {

@Id
    @GeneratedValue
    private Long id;


    private String name;
    private Integer age;


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

Implémentation de l'accès aux données de l'entité utilisateur (couvre les annotations du cache)

@CacheConfig(cacheNames = "users") public interface UserRepository extends JpaRepository {

@Cacheable
    User findByName(String name);


}

(cours recommandé : tutoriel Spring)

Commençons à transformer ce projet :

Étape 1 : Ajoutez des informations pertinentes à pom.xml Dépendance : 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

    org.springframework.boot spring-boot-starter-data-redis
  2. rrreee
  3. Dans les versions antérieures de Spring Boot 1.x, le nom de cette dépendance était spring-boot-starter-redis, donc dans >Spring Boot 1.xLe tutoriel de base est différent d'ici.

  4. Étape 2
 : Ajoutez des informations de configuration au fichier de configuration, prenez l'opération locale comme exemple, par exemple : 🎜🎜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🎜🎜 Concernant la configuration du pool de connexions, veuillez noter : 🎜🎜La configuration du pool de connexions de Redis est préfixée par spring.redis en version 1.x .pool est différent de Spring Boot 2.x. Dans la version 1.x, jedis est utilisé comme pool de connexions, tandis que dans la version 2.x, lettuce est utilisé comme pool de connexions. Les configurations ci-dessus sont toutes des valeurs par défaut. . En fait, les besoins de production apportent en outre les modifications appropriées en fonction de la situation de déploiement et des exigences commerciales.🎜🎜Essayons à nouveau les tests unitaires :🎜🎜@Slf4j. @RunWith(SpringRunner.class) @SpringBootTest public class Chapter54ApplicationTests {🎜rrreee🎜L'exécution du résultat du test peut obtenir :🎜🎜Type de CacheManager : classe org.springframework.data.redis.cache.RedisCacheManager Hibernate : sélectionnez next_val comme id_val dans hibernate_sequence pour la mise à jour Hibernate : mettre à jour hibernate_sequence set next_val= ? Hibernate : insérer dans les valeurs de l'utilisateur (âge, nom, identifiant) (?, ?, ?) 2020-08-12 16:25:26.954 INFO 68282 --- [ main] io.lettuce.core.EpollProvider : Démarrage sans bibliothèque epoll facultative 2020-08-12 16:25:26.955 INFO 68282 --- [ main] io.lettuce.core.KqueueProvider : Démarrage sans bibliothèque kqueue facultative Mise en veille prolongée : sélectionnez user0.id comme id10, user0_.age comme age20, user0_.name comme name30 de l'utilisateur user0 où user0.name=? Première requête : 10 Deuxième requête : 10🎜🎜(microclasse recommandée : microclasse Spring)🎜🎜Vous pouvez voir : 🎜
    🎜🎜Type CacheManager dans la première ligne du code de sortie > est <code>org.springframework.data.redis.cache.RedisCacheManager au lieu de EhCacheCacheManager dans l'article précédent🎜🎜🎜🎜Quand je l'ai interrogé pour la deuxième fois, il n'y avait pas Affichez l'instruction SQL, elle est donc obtenue à partir du cache🎜🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer