Introduzione a Spring Data Redis

Panoramica

Questo articolo è un’introduzione a Spring Data Redis, che fornisce le astrazioni della piattaforma Spring Data a Redis, il popolare archivio di strutture dati in memoria.

Redis è guidato da una struttura dati basata su keystore per mantenere i dati e può essere utilizzato come database, cache, broker di messaggi, ecc.

Saremo in grado di utilizzare i modelli comuni dei dati di Primavera(modelli, ecc.), pur avendo la tradizionale semplicità di tutti i progetti Spring Data.

Dipendenze Maven

Iniziamo dichiarando le dipendenze Spring Data Redis nel pom.xml:

<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.3.3.RELEASE</version> </dependency><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> <type>jar</type></dependency>

Le ultime versioni di spring-data-redis e jedis possono essere scaricate da Maven Central.

In alternativa, possiamo utilizzare Spring Boot starter per Redis, che eliminerà la necessità di dipendenze separate spring-data e jedis:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.3.3.RELEASE</version></dependency>

Ancora una volta, Maven central offre le ultime informazioni sulla versione.

La configurazione Redis

Per definire le impostazioni di connessione tra il client dell’applicazione e l’istanza del server Redis, è necessario utilizzare un client Redis.

C’è un certo numero di implementazioni client Redis disponibili per Java. In questo tutorial, useremo Jedis – un’implementazione client Redis semplice e potente.

C’è un buon supporto per la configurazione XML e Java nel framework; per questo tutorial, useremo la configurazione basata su Java.

3.1. Configurazione Java

Iniziamo con le definizioni del bean di configurazione:

@BeanJedisConnectionFactory jedisConnectionFactory() { return new JedisConnectionFactory();}@Beanpublic RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(jedisConnectionFactory()); return template;}

La configurazione è abbastanza semplice. Innanzitutto, utilizzando il client Jedis, stiamo definendo una connectionFactory.

Quindi, abbiamo definito un RedisTemplate usando jedisConnectionFactory. Questo può essere usato per interrogare i dati con un repository personalizzato.

3.2. Proprietà di connessione personalizzate

Potresti aver già notato che le solite proprietà relative alla connessione mancano nella configurazione precedente. Ad esempio, l’indirizzo del server e la porta mancano nella configurazione. Il motivo è semplice: per il nostro esempio, stiamo usando i valori predefiniti.

Tuttavia, se abbiamo bisogno di configurare i dettagli della connessione, possiamo sempre modificare la configurazione di jedisConnectionFactory come segue:

@BeanJedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory jedisConFactory = new JedisConnectionFactory(); jedisConFactory.setHostName("localhost"); jedisConFactory.setPort(6379); return jedisConFactory;}

Redis Repository

Usiamo un’entità studente per i nostri esempi:

@RedisHash("Student")public class Student implements Serializable { public enum Gender { MALE, FEMALE } private String id; private String name; private Gender gender; private int grade; // ...}

4.1. Il repository di dati Spring

Creiamo ora StudentRepository come segue:

@Repositorypublic interface StudentRepository extends CrudRepository<Student, String> {}

Accesso ai dati utilizzando StudentRepository

Estendendo CrudRepository in StudentRepository, otteniamo automaticamente un set completo di metodi di persistenza che eseguono la funzionalità CRUD.

5.1. Salvataggio di un nuovo oggetto Student

Salviamo un nuovo oggetto student nell’archivio dati:

Student student = new Student( "Eng2015001", "John Doe", Student.Gender.MALE, 1);studentRepository.save(student);

5.2. Recupero di un Oggetto Studente esistente

Possiamo verificare il corretto inserimento dello studente nella sezione precedente recuperando i dati dello studente:

Student retrievedStudent = studentRepository.findById("Eng2015001").get();

5.3. Aggiornamento di un oggetto Studente esistente

Cambiamo il nome dello studente recuperato sopra e lo salviamo di nuovo:

retrievedStudent.setName("Richard Watson");studentRepository.save(student);

Infine, possiamo recuperare nuovamente i dati dello studente e verificare che il nome sia aggiornato nel datastore.

5.4. Eliminazione dei dati degli studenti esistenti

Possiamo eliminare i dati degli studenti sopra inseriti:

studentRepository.deleteById(student.getId());

Ora possiamo cercare l’oggetto student e verificare che il risultato sia null.

5.5. Trova tutti i dati degli studenti

Possiamo inserire alcuni oggetti degli studenti:

Student engStudent = new Student( "Eng2015001", "John Doe", Student.Gender.MALE, 1);Student medStudent = new Student( "Med2015001", "Gareth Houston", Student.Gender.MALE, 2);studentRepository.save(engStudent);studentRepository.save(medStudent);

Possiamo anche raggiungere questo obiettivo inserendo una collezione. Per questo, esiste un metodo diverso-saveAll () – che accetta un singolo oggetto iterabile contenente più oggetti student che vogliamo persistere.

Per trovare tutti gli studenti inseriti, possiamo usare il metodo findAll() :

List<Student> students = new ArrayList<>();studentRepository.findAll().forEach(students::add);

Quindi possiamo controllare rapidamente la dimensione dell’elenco degli studenti o verificare una maggiore granularità controllando le proprietà di ciascun oggetto.

Conclusione



+