Introducere în Spring Data Redis

Prezentare generală

acest articol este o introducere în Spring Data Redis, care oferă abstracțiile platformei de date Spring către Redis – popularul Magazin de structuri de date din memorie.

Redis este condus de o structură de date bazată pe keystore pentru a persista date și poate fi utilizată ca bază de date, cache, broker de mesaje etc.

vom putea folosi modelele comune ale datelor de primăvară (șabloane etc.), având în același timp simplitatea tradițională a tuturor proiectelor de date de primăvară.

dependențe Maven

să începem prin declararea dependențelor de date de primăvară Redis în 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>

cele mai recente versiuni ale spring-data-redis și jedis pot fi descărcate de la Maven Central.

alternativ, putem folosi starterul de pornire cu arc pentru Redis, ceea ce va elimina necesitatea unor dependențe separate de date cu arc și Jedis:

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

din nou, Maven central oferă cele mai recente informații despre versiune.

configurația Redis

pentru a defini setările de conexiune între clientul aplicației și instanța Redis server, trebuie să folosim un client Redis.

există o serie de implementări client Redis disponibile pentru Java. În acest tutorial, vom folosi Jedis – o implementare simplă și puternică a clientului Redis.

există un suport bun atât pentru configurația XML, cât și pentru configurația Java în cadru; pentru acest tutorial, vom folosi configurația bazată pe Java.

3.1. Configurare Java

să începem cu definițiile de fasole de configurare:

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

configurația este destul de simplă. În primul rând, folosind clientul Jedis, definim o connectionFactory.

apoi, am definit un RedisTemplate folosind jedisConnectionFactory. Acest lucru poate fi utilizat pentru interogarea datelor cu un depozit personalizat.

3.2. Proprietăți de conectare personalizate

este posibil să fi observat deja că proprietățile obișnuite legate de conexiune lipsesc în configurația de mai sus. De exemplu, adresa serverului și portul lipsesc în configurație. Motivul este simplu: pentru exemplul nostru, folosim valorile implicite.

cu toate acestea, dacă trebuie să configurăm detaliile conexiunii, putem modifica întotdeauna configurația jedisConnectionFactory după cum urmează:

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

Redis Repository

să folosim o entitate studențească pentru exemplele noastre:

@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. Depozitul de date de primăvară

să creăm acum StudentRepository după cum urmează:

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

accesul la date folosind StudentRepository

prin extinderea CrudRepository în StudentRepository, vom obține în mod automat un set complet de metode de persistență care efectuează funcționalitatea CRUD.

5.1. Salvarea unui obiect Student nou

să salvăm un obiect student nou în depozitul de date:

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

5.2. Preluarea unui obiect Student existent

putem verifica inserarea corectă a elevului în secțiunea anterioară prin preluarea datelor elevului:

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

5.3. Actualizarea unui obiect Student existent

să schimbăm numele elevului preluat mai sus și să îl salvăm din nou:

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

în cele din urmă, putem prelua din nou datele elevului și putem verifica dacă numele este actualizat în magazinul de date.

5.4. Ștergerea unui Student existent de date

putem șterge datele de student inserate mai sus:

studentRepository.deleteById(student.getId());

acum putem căuta obiectul student și putem verifica dacă rezultatul este nul.

5.5. Găsiți toate datele studenților

putem insera câteva obiecte studențești:

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);

putem realiza acest lucru și prin introducerea unei colecții. Pentru aceasta, există o metodă diferită – saveAll() – care acceptă un singur obiect Iterabil care conține mai multe obiecte studențești pe care dorim să le persistăm.

pentru a găsi toți elevii inserate, putem folosi metoda findAll() :

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

apoi putem verifica rapid dimensiunea listei studenților sau putem verifica o granularitate mai mare verificând proprietățile fiecărui obiect.

concluzie



+