Redis z Spring Bootem

Nov 28 2022
Wstęp
W tym poście omówimy Redis, Redis to baza danych NoSQL oparta na wartościach kluczy, której można używać do wielu celów. Jest to open source i jest to magazyn struktury danych InMemory.
Zdjęcie Josha Glausera na Unsplash

W tym poście omówimy Redis , Redis to baza danych NoSQL oparta na wartościach kluczy, której można używać do wielu celów. Jest to open source i jest to magazyn struktury danych InMemory. Ponieważ Redis obsługuje wszystkie podstawowe struktury danych, takie jak lista, zestaw, mapa i zestaw posortowany.

Za pomocą Redis możemy tworzyć różnego rodzaju aplikacje, takie jak aplikacje do czatowania, aplikacje do przechowywania sesji, pulpity nawigacyjne do gier itp.

Jeśli chcesz nauczyć się Redis, najpierw zapoznaj się z różnymi strukturami danych obsługiwanymi przez Redis, oprócz poleceń, za pomocą których możemy przechowywać i pobierać dane z Redis.

Kilka ważnych poleceń

Redis obsługuje String, Set, Sorted Set, List i HashMap jako kluczowe wartości. Poniżej znajduje się kilka podstawowych poleceń umożliwiających zrozumienie różnych struktur danych.

String 
SET foo bar (foo is key, bar is value)
GET foo
bar
HashMap

HMSET student name: "shubham" age: 25
HGETALL student
List
LPUSH product car
LPUSH product bike

LRANGE product 0 10
Set
SADD product car
SADD product bike

SMEMBERS product

Przypadki użycia Redis

  1. Redis może być używany jako baza danych NoSQL oparta na klucz-wartość.
  2. Redis może być używany jako dostawca pamięci podręcznej.
  3. Redis może być używany jako wydawca i subskrybent, który jest używany w przetwarzaniu zdarzeń.
  4. Redis może być używany jako magazyn sesji.
  5. Redis może być używany w aplikacjach do czatu.

Więc jeśli po przeczytaniu tego zainteresujesz się, a teraz chcesz poćwiczyć w Redis, skonfiguruj serwer Redis w swoim systemie.

  1. Zainstaluj homebrew w swoim systemie, jeśli go tam nie ma.
  2. Uruchom poniższe polecenia sekwencyjnie
  3. brew install redis
    
    After succesfull installation 
    
    brew services start redis
    
    After starting redis if you want to try above commands
    
    redis-cli
    
    To test whether redis server is working
    
    PING
    
    If yu get PONG then its connected
    
    If you want to monitor which all commands are getting executed on redis
    
    redis-monitor
    

Więc po tym, jeśli chcesz używać Redis z innego systemu, potrzebujesz klienta, który będzie współdziałał z serwerem Redis.

Teraz w tej części zobaczymy, jak możemy używać Redis z rozruchem wiosennym i używać go jako bazy danych NoSQL.

Organizować coś

Pierwszym krokiem jest utworzenie przykładowego projektu Spring boot z inicjatora Spring i dodanie zależności spring-boot-starter-data-redis .

Teraz po zaimportowaniu projektu do swojego ulubionego IDE, utwórz pakiety i klasy.

Pierwsza klasa będzie dotyczyła konfiguracji, mamy dwa sterowniki dla Redis, jeden to Jedis, drugi to sałata (jest leniwie inicjowany, a pod względem wydajności również jest lepszy).

Oprócz sterownika potrzebujemy szablonu do wykonywania operacji na serwerze Redis, podobnie jak mamy RestTemplate do wykonywania operacji odpoczynku.

package com.redisexample.redisdemo.config;

import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
//@EnableRedisRepositories
public class AppConfig {

    //There are two ways of creating driver, one is jedis another is lettuce,
    //lettuce is bit lazy in intialization so it creates beans  lazily
//It is using default host and port
    @Bean
    RedisConnectionFactory jedisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new JdkSerializationRedisSerializer());
        template.setValueSerializer(new JdkSerializationRedisSerializer());
        template.setEnableTransactionSupport(true);
        template.afterPropertiesSet();
        return template;
    }

    //For setting host and port
//    @Bean
//    JedisConnectionFactory jedisConnectionFactory() {
//        JedisConnectionFactory jedisConFactory
//                = new JedisConnectionFactory();
//        jedisConFactory.setHostName("localhost");
//        jedisConFactory.setPort(6379);
//        return jedisConFactory;
//    }

}

Utwórz klasę Entity

@RedisHash("student") // this is a set so we can use set command to see data via redis cli
public class Student {

    public enum Gender {
        MALE, FEMALE
    }

    private Long id;
    private String name;
    private int age;
    private String city;

    //getters and setters
}

@Repository
public interface StudnetRepo extends CrudRepository<Student, Long> {

}

package com.redisexample.redisdemo.controller;

import com.redisexample.redisdemo.model.Student;
import com.redisexample.redisdemo.repo.StudnetRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudnetRepo studnetRepo;

    @PostMapping
    public void saveStudent(@RequestBody Student student){
        studnetRepo.save(student);
    }

    @GetMapping
    public Iterable<Student> getStudent(){
        return studnetRepo.findAll();
    }
}

Jest to więc prosty przykład użycia Redis jako bazy danych z aplikacją wiosennego rozruchu.

W następnym poście zobaczymy, jak używać Redis jako dostawcy pamięci podręcznej.

Dziękuje za przeczytanie!!