Redis mit Spring Boot

Nov 28 2022
Einführung
In diesem Beitrag werden wir Redis besprechen, Redis ist eine auf Schlüsselwerten basierende NoSQL-Datenbank, die für mehrere Zwecke verwendet werden kann. Es ist Open Source und ein InMemory-Datenstrukturspeicher.
Foto von Josh Glauser auf Unsplash

In diesem Beitrag werden wir Redis diskutieren , Redis ist eine Key-Value-basierte NoSQL-Datenbank, die für mehrere Zwecke verwendet werden kann. Es ist Open Source und ein InMemory-Datenstrukturspeicher. Weil Redis alle grundlegenden Datenstrukturen wie Liste, Menge, Karte und sortierte Menge unterstützt.

Mit Redis können wir verschiedene Arten von Anwendungen entwickeln, wie Chat-Anwendungen, Sitzungsspeicheranwendungen, Gaming-Dashboards usw.

Wenn Sie Redis lernen möchten, verstehen Sie zunächst die verschiedenen Datenstrukturen, die Redis unterstützt, abgesehen von den Befehlen, mit denen wir Daten von Redis speichern und abrufen können.

Einige wichtige Befehle

Redis unterstützt String, Set, Sorted Set, List und HashMap als Schlüsselwerte. Nachfolgend finden Sie einige grundlegende Befehle, um ein Verständnis für verschiedene Datenstrukturen zu erhalten.

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

Anwendungsfälle von Redis

  1. Redis kann als Key-Value-basierte NoSQL-Datenbank verwendet werden.
  2. Redis kann als Cache-Anbieter verwendet werden.
  3. Redis kann als Herausgeber und Abonnent verwendet werden, was in der Ereignisverarbeitung verwendet wird.
  4. Redis kann als Sitzungsspeicher verwendet werden.
  5. Redis kann in Chat-Anwendungen verwendet werden.

Wenn Sie also nach dem Lesen dieses Artikels Interesse bekommen und jetzt ein paar praktische Übungen mit Redis machen möchten, richten Sie den Redis-Server in Ihrem System ein.

  1. Installieren Sie Homebrew in Ihrem System, falls nicht vorhanden.
  2. Die folgenden Befehle nacheinander ausführen
  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
    

Wenn Sie also Redis von einem anderen System aus verwenden möchten, benötigen Sie einen Client, der mit dem Redis-Server interagiert.

In diesem Teil werden wir nun sehen, wie wir Redis mit Spring Boot verwenden und als NoSQL-DB verwenden können.

Konfiguration

Der erste Schritt besteht darin, ein Beispiel-Spring-Boot-Projekt aus spring initializer zu erstellen und spring-boot-starter-data-redis abhängigkeit hinzuzufügen .

Nachdem Sie das Projekt nun in Ihre bevorzugte IDE importiert haben, erstellen Sie Pakete und Klassen.

Die erste Klasse wird für die Konfiguration sein. Wir haben zwei Treiber für Redis, einer ist Jedis, der andere ist Salat (Er wird träge initialisiert und ist auch leistungsmäßig besser.)

Abgesehen vom Treiber benötigen wir eine Vorlage für Operationen auf dem Redis-Server, ähnlich wie wir RestTemplate für Restoperationen haben.

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;
//    }

}

Erstellen Sie eine Entitätsklasse

@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();
    }
}

Dies ist also ein einfaches Beispiel für die Verwendung von Redis als DB mit einer Spring-Boot-Anwendung.

Im nächsten Beitrag werden wir sehen, wie man Redis als Cache-Provider verwendet.

Danke fürs Lesen!!