introduktion till Spring Data Redis

översikt

den här artikeln är en introduktion till Spring Data Redis, som ger abstraktionerna Från Spring Data platform till Redis – den populära datastrukturen i minnet.

Redis drivs av en keystore-baserad datastruktur för att fortsätta data och kan användas som databas, cache, meddelandemäklare etc.

vi kommer att kunna använda de vanliga mönstren för Fjäderdata(mallar etc.), samtidigt som den traditionella enkelheten i alla Vårdataprojekt.

Maven-beroenden

Låt oss börja med att förklara Fjäderdata Redis-beroenden i 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>

de senaste versionerna av spring-data-redis och jedis kan laddas ner från Maven Central.

Alternativt kan vi använda Spring Boot starter för Redis, vilket eliminerar behovet av separata fjäderdata och jedis-beroenden:

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

återigen erbjuder Maven central den senaste versionsinformationen.

Redis-konfigurationen

för att definiera anslutningsinställningarna mellan applikationsklienten och Redis-serverinstansen måste vi använda en Redis-klient.

det finns ett antal Redis-klientimplementeringar tillgängliga för Java. I den här handledningen använder vi Jedis-en enkel och kraftfull Redis-klientimplementering.

det finns bra stöd för både XML-och Java-konfiguration i ramverket; för denna handledning använder vi Java-baserad konfiguration.

3.1. Java-konfiguration

låt oss börja med konfigurationsbönsdefinitionerna:

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

konfigurationen är ganska enkel. Först, med Jedis-klienten, definierar vi en connectionFactory.

sedan definierade vi en RedisTemplate med jedisConnectionFactory. Detta kan användas för att fråga data med ett anpassat arkiv.

3.2. Anpassade Anslutningsegenskaper

du kanske redan har märkt att de vanliga anslutningsrelaterade egenskaperna saknas i ovanstående konfiguration. Till exempel saknas serveradressen och porten i konfigurationen. Anledningen är enkel: för vårt exempel använder vi standardinställningarna.

men om vi behöver konfigurera anslutningsinformationen kan vi alltid ändra jedisconnectionfactory-konfigurationen enligt följande:

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

Redis Repository

Låt oss använda en Studentenhet för våra exempel:

@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. Vårdataarkivet

Låt oss nu skapa StudentRepository enligt följande:

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

dataåtkomst med StudentRepository

genom att utöka CrudRepository i StudentRepository får vi automatiskt en komplett uppsättning persistensmetoder som utför CRUD-funktionalitet.

5.1. Spara ett nytt Studentobjekt

Låt oss spara ett nytt studentobjekt i datalagret:

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

5.2. Hämta ett befintligt Studentobjekt

vi kan verifiera korrekt infogning av studenten i föregående avsnitt genom att hämta Studentdata:

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

5.3. Uppdatera ett befintligt Studentobjekt

Låt oss ändra namnet på den student som hämtats ovan och spara det igen:

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

slutligen kan vi hämta studentens data igen och verifiera att namnet uppdateras i datalagret.

5.4. Ta bort en befintlig Studentdata

vi kan ta bort ovanstående infogade Studentdata:

studentRepository.deleteById(student.getId());

nu kan vi söka efter studentobjektet och verifiera att resultatet är null.

5.5. Hitta alla Studentdata

vi kan infoga några studentobjekt:

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 också uppnå detta genom att infoga en samling. För det finns det en annan metod – saveAll() – som accepterar ett enda Iterabelt objekt som innehåller flera studentobjekt som vi vill fortsätta.

för att hitta alla infogade studenter kan vi använda findAll () – metoden:

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

då kan vi snabbt kontrollera storleken på studentlistan eller verifiera för en större granularitet genom att kontrollera egenskaperna för varje objekt.

slutsats



+