Redis con stivale a molla

Nov 28 2022
introduzione
In questo post parleremo di Redis, Redis è un database NoSQL basato su valore-chiave che può essere utilizzato per molteplici scopi. È open source ed è un archivio di strutture dati InMemory.
Foto di josh Glauser su Unsplash

In questo post parleremo di Redis , Redis è un database NoSQL basato su chiave-valore che può essere utilizzato per molteplici scopi. È open source ed è un archivio di strutture dati InMemory. Perché Redis supporta tutte le strutture di dati di base come elenco, set, mappa e set ordinato.

Utilizzando Redis possiamo sviluppare diversi tipi di applicazioni come applicazioni di chat, applicazioni di archiviazione di sessioni, dashboard di gioco ecc.

Se vuoi imparare Redis, prima comprendi le diverse strutture di dati che Redis supporta oltre ai comandi che utilizzano i quali possiamo archiviare e ottenere dati da Redis.

Alcuni comandi importanti

Redis supporta String, Set, Sorted Set, List e HashMap come valori chiave. Di seguito sono riportati alcuni comandi di base per comprendere le diverse strutture di dati.

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

Usa i casi di Redis

  1. Redis può essere utilizzato come database NoSQL basato su valore-chiave.
  2. Redis può essere utilizzato come provider di cache.
  3. Redis può essere utilizzato come editore e sottoscrittore, che viene utilizzato nell'elaborazione degli eventi.
  4. Redis può essere utilizzato come archivio di sessione.
  5. Redis può essere utilizzato nelle applicazioni di chat.

Quindi, se ti interessa dopo aver letto questo e ora vuoi fare un po' di pratica su Redis, configura il server Redis nel tuo sistema.

  1. Installa homebrew nel tuo sistema se non c'è.
  2. I comandi Esegui sotto in sequenza
  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
    

Quindi, dopo questo, se vuoi usare Redis da qualche altro sistema, allora hai bisogno di un client che interagirà con il server Redis.

Ora in questa parte vedremo come possiamo utilizzare Redis con l'avvio a molla e utilizzarlo come database NoSQL.

Impostare

Il primo passaggio consiste nel creare un progetto di avvio Spring di esempio dall'inizializzatore spring e aggiungere la dipendenza spring-boot-starter-data-redis .

Ora, dopo aver importato il progetto nel tuo IDE preferito, crea pacchetti e classi.

La prima classe sarà per la configurazione, abbiamo due driver per Redis, uno è Jedis, un altro è lattuga (è inizializzato pigramente e anche per quanto riguarda le prestazioni è migliore).

Oltre al driver, abbiamo bisogno di un modello per eseguire operazioni sul server Redis, allo stesso modo in cui abbiamo RestTemplate per eseguire operazioni di riposo.

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

}

Crea una classe di entità

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

Quindi questo è un semplice esempio di utilizzo di Redis come DB con un'applicazione di avvio a molla.

Nel prossimo post vedremo come utilizzare Redis come provider di cache.

Grazie per aver letto!!