Introduktion til Spring Data Redis

oversigt

denne artikel er en introduktion til Spring Data Redis, som giver abstraktionerne af Spring Data platform til Redis – den populære in-memory datastruktur butik.

Redis drives af en keystore-baseret datastruktur for at fortsætte data og kan bruges som database, cache, meddelelsesmægler osv.

vi vil være i stand til at bruge de fælles mønstre af foråret Data (skabeloner, etc.), samtidig med at den traditionelle enkelhed i alle Forårsdataprojekter.

Maven afhængigheder

lad os starte med at erklære foråret data Redis afhængigheder i pom.kml:

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

de nyeste versioner af spring-data-redis og jedis kan hentes fra Maven Central.

Alternativt kan vi bruge Spring Boot starter til Redis, som eliminerer behovet for separate spring-data og jedis afhængigheder:

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

igen tilbyder Maven central de nyeste versionsoplysninger.

Redis-konfigurationen

for at definere forbindelsesindstillingerne mellem applikationsklienten og Redis-serverforekomsten skal vi bruge en Redis-klient.

der er en række Redis klient implementeringer til rådighed for Java. I denne tutorial bruger vi Jedis-en enkel og kraftfuld Redis-klientimplementering.

der er god support til både Java-konfiguration og Java-konfiguration i rammen; til denne tutorial bruger vi Java-baseret konfiguration.

3.1. Java-konfiguration

lad os starte med konfigurationsbønnedefinitionerne:

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

konfigurationen er ret simpel. Først ved hjælp af Jedis-klienten definerer vi en connectionFactory.

derefter definerede vi en RedisTemplate ved hjælp af jedisConnectionFactory. Dette kan bruges til at forespørge data med en brugerdefineret repository.

3.2. Brugerdefinerede forbindelsesegenskaber

du har måske allerede bemærket, at de sædvanlige forbindelsesrelaterede egenskaber mangler i ovenstående konfiguration. For eksempel mangler serveradressen og porten i konfigurationen. Årsagen er enkel: for vores eksempel bruger vi standardindstillingerne.

men hvis vi har brug for at konfigurere forbindelsesdetaljerne, kan vi altid ændre jedisconnectionfactory-konfigurationen som følger:

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

Redis Repository

lad os bruge en Studenterenhed til vores eksempler:

@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. Spring Data Repository

lad os nu oprette StudentRepository som følger:

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

dataadgang ved hjælp af StudentRepository

ved at udvide CrudRepository i StudentRepository får vi automatisk et komplet sæt persistensmetoder, der udfører CRUD-funktionalitet.

5.1. Gemme et nyt Elevobjekt

lad os gemme et nyt elevobjekt i datalageret:

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

5.2. Hentning af et eksisterende Elevobjekt

vi kan verificere den korrekte indsættelse af den studerende i det foregående afsnit ved at hente elevdataene:

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

5.3. Opdatering af et eksisterende Elevobjekt

lad os ændre navnet på den studerende, der er hentet ovenfor, og gemme det igen:

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

endelig kan vi hente den studerendes data igen og kontrollere, at navnet er opdateret i datalageret.

5.4. Sletning af eksisterende elevdata

vi kan slette de ovenfor indsatte elevdata:

studentRepository.deleteById(student.getId());

nu kan vi søge efter elevobjektet og kontrollere, at resultatet er null.

5.5. Find alle elevdata

vi kan indsætte et par elevobjekter:

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

vi kan også opnå dette ved at indsætte en samling. Til det er der en anden metode – saveAll() – som accepterer et enkelt Iterabelt objekt, der indeholder flere elevobjekter, som vi vil fortsætte.

for at finde alle indsatte studerende kan vi bruge findAll () – metoden:

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

så kan vi hurtigt kontrollere størrelsen på elevernes liste eller kontrollere for en større granularitet ved at kontrollere egenskaberne for hvert objekt.

konklusion



+