Redis с Spring Boot

Nov 28 2022
Вступление
В этом посте мы обсудим Redis. Redis — это база данных NoSQL на основе ключей и значений, которую можно использовать для различных целей. Это открытый исходный код, и это хранилище структуры данных InMemory.
Фото Джоша Глаузера на Unsplash

В этом посте мы обсудим Redis . Redis — это база данных NoSQL на основе ключей и значений, которую можно использовать для различных целей. Это открытый исходный код, и это хранилище структуры данных InMemory. Потому что Redis поддерживает все основные структуры данных, такие как список, набор, карта и отсортированный набор.

Используя Redis, мы можем разрабатывать различные типы приложений, такие как приложения для чата, приложения для хранения сеансов, игровые панели и т. д.

Если вы хотите изучить Redis, сначала узнайте о различных структурах данных, которые Redis поддерживает, кроме команд, с помощью которых мы можем хранить и получать данные из Redis.

Некоторые важные команды

Redis поддерживает String, Set, Sorted Set, List и HashMap в качестве ключ-значение. Ниже приведены некоторые основные команды для понимания различных структур данных.

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

Варианты использования Redis

  1. Redis можно использовать в качестве базы данных NoSQL на основе ключей и значений.
  2. Redis можно использовать в качестве поставщика кеша.
  3. Redis можно использовать в качестве издателя и подписчика, который используется при обработке событий.
  4. Redis можно использовать как хранилище сеансов.
  5. Redis можно использовать в чат-приложениях.

Так что, если после прочтения это вас заинтересовало, и теперь вы хотите попрактиковаться в Redis, настройте сервер Redis в своей системе.

  1. Установите homebrew в вашей системе, если ее там нет.
  2. Команды «Выполнить ниже» последовательно
  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
    

Поэтому после этого, если вы хотите использовать Redis из какой-либо другой системы, вам понадобится клиент, который будет взаимодействовать с сервером Redis.

Теперь в этой части мы увидим, как мы можем использовать Redis с весенней загрузкой и использовать его в качестве базы данных NoSQL.

Настраивать

Первым шагом является создание образца проекта загрузки Spring из инициализатора Spring и добавление зависимости spring-boot-starter-data-redis .

Теперь, после импорта проекта в вашу любимую IDE, создайте пакеты и классы.

Первый класс будет для конфигурации. У нас есть два драйвера для Redis, один — Jedis, другой — салат (он лениво инициализируется, и с точки зрения производительности он также лучше).

Помимо драйвера, нам нужен шаблон для выполнения операций на сервере Redis, аналогично тому, как у нас есть RestTemplate для выполнения остальных операций.

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

}

Создайте класс сущности

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

Итак, это простой пример использования Redis в качестве БД с приложением Spring Boot.

В следующем посте мы увидим, как использовать Redis в качестве поставщика кеша.

Спасибо за прочтение!!