Wprowadzenie do Spring Data Redis

przegląd

ten artykuł jest wprowadzeniem do Spring Data Redis, które dostarcza abstrakcji Spring Data platform do Redis – popularnego magazynu struktury danych w pamięci.

Redis jest napędzany przez strukturę danych opartą na keystore do przechowywania danych i może być używany jako baza danych, Pamięć podręczna, broker wiadomości itp.

będziemy mogli korzystać ze wspólnych wzorców danych Spring (szablony itp.), przy jednoczesnym zachowaniu tradycyjnej prostoty wszystkich projektów Spring Data.

Maven Dependencies

Zacznijmy od zadeklarowania Spring Data Redis dependencies w 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>

najnowsze wersje spring-data-redis i jedis można pobrać z Maven Central.

alternatywnie możemy użyć Spring Boot starter dla Redis, co wyeliminuje potrzebę osobnych zależności spring-data i jedis:

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

ponownie, Maven central oferuje najnowsze informacje o wersji.

Konfiguracja Redis

aby zdefiniować ustawienia połączenia między Klientem aplikacji a instancją serwera Redis, musimy użyć klienta Redis.

istnieje wiele implementacji klienta Redis dostępnych dla środowiska Java. W tym samouczku użyjemy Jedis-prostej i potężnej implementacji klienta Redis.

istnieje dobre wsparcie dla konfiguracji XML i Java w ramach; w tym samouczku użyjemy konfiguracji opartej na Javie.

3.1. Konfiguracja Javy

Zacznijmy od definicji konfiguracji:

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

konfiguracja jest dość prosta. Po pierwsze, używając klienta Jedis, definiujemy fabrykę połączeń.

następnie zdefiniowaliśmy szablon RedisTemplate używając fabryki jedisConnectionFactory. Może to być użyte do odpytywania danych za pomocą niestandardowego repozytorium.

3.2. Niestandardowe właściwości połączenia

być może zauważyłeś już, że w powyższej konfiguracji brakuje zwykłych właściwości związanych z połączeniem. Na przykład w konfiguracji brakuje adresu i portu serwera. Powód jest prosty: dla naszego przykładu używamy wartości domyślnych.

jednak, jeśli musimy skonfigurować szczegóły połączenia, zawsze możemy zmodyfikować konfigurację jedisConnectionFactory w następujący sposób:

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

repozytorium Redis

użyjmy jednostki ucznia jako naszych przykładów:

@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. Wiosenne repozytorium danych

stwórzmy teraz StudentRepository w następujący sposób:

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

dostęp do danych za pomocą StudentRepository

rozszerzając CrudRepository w StudentRepository, automatycznie otrzymujemy kompletny zestaw metod trwałości, które wykonują funkcje CRUD.

5.1. Zapisywanie nowego obiektu ucznia

zapisujemy nowy obiekt ucznia w magazynie danych:

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

5.2. Odzyskiwanie istniejącego obiektu ucznia

możemy zweryfikować poprawne wstawianie ucznia w poprzedniej sekcji, pobierając dane ucznia:

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

5.3. Aktualizacja istniejącego obiektu ucznia

zmieńmy nazwę ucznia pobranego powyżej i zapiszmy go ponownie:

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

na koniec możemy ponownie pobrać dane ucznia i zweryfikować, czy nazwa jest aktualizowana w magazynie danych.

5.4. Usunięcie istniejących danych ucznia

możemy usunąć wyżej wstawione dane ucznia:

studentRepository.deleteById(student.getId());

teraz możemy wyszukać obiekt student i sprawdzić, czy wynik jest null.

5.5. Znajdź wszystkie dane ucznia

możemy wstawić kilka obiektów ucznia:

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

możemy to również osiągnąć poprzez wstawienie kolekcji. W tym celu istnieje inna metoda-saveAll () – która akceptuje pojedynczy obiekt iteracyjny zawierający wiele obiektów studenckich, które chcemy utrzymywać.

aby znaleźć wszystkich wstawionych uczniów, możemy użyć metody findAll() :

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

wtedy możemy szybko sprawdzić rozmiar listy uczniów lub zweryfikować większą szczegółowość, sprawdzając właściwości każdego obiektu.

podsumowanie



+