1. Panoramica
Una delle principali attrazioni di Spring Boot è il modo in cui spesso riduce la configurazione di terze parti a poche proprietà.
In questo tutorial, vedremo come Spring Boot semplifica il lavoro con Redis.
2. Perché Redis?
Redis è uno dei più popolari archivi di strutture dati in memoria. Per questo motivo, può essere utilizzato come database, cache e broker di messaggi.
In termini di prestazioni, è ben noto per i suoi tempi di risposta rapidi. Di conseguenza, può servire centinaia di migliaia di operazioni al secondo ed è facilmente scalabile.
E si accoppia bene con le applicazioni Spring Boot . Ad esempio, possiamo usarlo come cache nella nostra architettura di microservizi. Possiamo anche usarlo come database NoSQL.
3. Esecuzione di Redis
Per iniziare, creiamo un'istanza Redis usando la loro immagine Docker ufficiale.
$ docker run -p 16379:6379 -d redis:6.0 redis-server --requirepass "mypass"
Sopra, abbiamo appena avviato un'istanza di Redis sulla porta 16379 con una password di mypass .
4. Starter
Spring ci offre un ottimo supporto per connettere le nostre applicazioni Spring Boot con Redis utilizzando Spring Data Redis.
Quindi, in seguito, assicuriamoci di avere la dipendenza spring-boot-starter-data-redis nel nostro pom.xml :
org.springframework.boot spring-boot-starter-data-redis 2.2.6.RELEASE
5. Lattuga
Successivamente, configuriamo il client.
Il client Java Redis che useremo è Lettuce poiché Spring Boot lo utilizza per impostazione predefinita. Tuttavia, avremmo potuto usare anche Jedis.
In ogni caso, il risultato è un'istanza di RedisTemplate :
@Bean public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(connectionFactory); // Add some specific configuration here. Key serializers, etc. return template; }
6. Proprietà
Quando usiamo Lettuce, non abbiamo bisogno di configurare RedisConnectionFactory. Spring Boot lo fa per noi.
Tutto ciò che ci resta, quindi, è specificare alcune proprietà nel nostro file application.properties :
spring.redis.database=0 spring.redis.host=localhost spring.redis.port=16379 spring.redis.password=mypass spring.redis.timeout=60000
Rispettivamente:
- database imposta l'indice del database utilizzato dal factory di connessione
- host è dove si trova l'host del server
- porta indica la porta su cui il server è in ascolto
- password è la password di accesso per il server e
- timeout stabilisce il timeout di connessione
Naturalmente, ci sono molte altre proprietà che possiamo configurare. L'elenco completo delle proprietà di configurazione è disponibile nella documentazione di Spring Boot.
7. Demo
Infine, proviamo a usarlo nella nostra applicazione. Se immaginiamo una classe Book e un BookRepository, possiamo creare e recuperare i libri , utilizzando il nostro RedisTemplate per interagire con Redis come nostro backend:
@Autowired private RedisTemplate redisTemplate; public void save(Book book) { redisTemplate.opsForValue().set(book.getId(), book); } public Book findById(Long id) { return redisTemplate.opsForValue().get(id); }
Per impostazione predefinita, Lettuce gestirà la serializzazione e la deserializzazione per noi, quindi non c'è più niente da fare a questo punto. Tuttavia, è bene sapere che anche questo può essere configurato.
Un'altra caratteristica importante è poiché RedisTemplate è thread-safe , quindi funzionerà correttamente in ambienti multi-thread.
8. Conclusione
In questo articolo, abbiamo configurato Spring Boot per parlare con Redis tramite Lettuce. E l'abbiamo raggiunto con un antipasto, una singola configurazione @Bean e una manciata di proprietà.
Per concludere, abbiamo usato RedisTemplate per fare in modo che Redis agisse come un semplice backend.
L'esempio completo può essere trovato su GitHub.