Maison > Article > base de données > Comment utiliser le cache centralisé Redis dans Spring Boot
@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; } }
@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
中增加相关依赖:
<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.pool
与Spring 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微课)
可以看到:
第一行输出的CacheManager type
为org.springframework.data.redis.cache.RedisCacheManager
,而不是上一篇中的EhCacheCacheManager
Spring Boot 1.x
, le nom de cette dépendance était spring-boot-starter-redis
, donc dans >Spring Boot 1.x
Le tutoriel de base est différent d'ici.
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!