Въведение

В тази публикация ще обсъдим 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 има много други функции като HyperLogLog и Transactions.

Случаи на използване на Redis

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

Настройте Redis на MacOS

Така че, ако проявите интерес, след като прочетете това и сега искате да направите малко практическа практика с Redis, настройте Redis сървъра във вашата система.

  1. Инсталирайте homebrew във вашата система, ако не е там.
  2. Командите Изпълнение по-долу последователно
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 в Windows

Няма директен софтуер за инсталиране, просто изтеглете проекта git hub и стартирайте пакетния файл от папката bin.

Така че след това, ако искате да използвате Redis от друга система, имате нужда от клиент, който ще взаимодейства със сървъра на Redis.

Сега в тази част ще видим как можем да използваме Redis с пролетно зареждане и да го използваме като NoSQL DB.

Настройвам

Първата стъпка е да създадете примерен проект за стартиране на Spring от spring initializer и да добавите spring-boot-starter-data-redisзависимост.

Сега, след като импортирате проекта в любимата си IDE, създайте пакети и класове.

Първият клас ще бъде за конфигуриране. Имаме два драйвера за Redis, единият е Jedis, а другият е martuce (Той е лениво инициализиран и по отношение на производителността също е по-добър.)

Освен драйвера, имаме нужда от шаблон за извършване на операции на 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;
//    }

}

Горният клас ще направи нашето приложение готово за свързване със сървъра на Redis. Сега е лесно, можем да използваме основни класове на обекти, хранилища, услуги и контролери за извършване на CRUD операция на Redis.

Създаване на клас 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> {

}

Сега създайте сервизен клас и след това контролер за създаване на API.

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

Можем да тестваме горните крайни точки чрез Postman и можем да наблюдаваме командите чрез Redis CLI (мониторна команда).

Така че това е прост пример за използване на Redis като DB с приложение за пролетно зареждане.

В следващата публикация ще видим как да използваме Redis като доставчик на кеш памет.

Ако търсите видео обяснение, можете да го гледате тук.

Благодаря за четенето!!