Redis z Spring Bootem
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
- Redis może być używany jako baza danych NoSQL oparta na klucz-wartość.
- Redis może być używany jako dostawca pamięci podręcznej.
- Redis może być używany jako wydawca i subskrybent, który jest używany w przetwarzaniu zdarzeń.
- Redis może być używany jako magazyn sesji.
- 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.
- Zainstaluj homebrew w swoim systemie, jeśli go tam nie ma.
- Uruchom poniższe polecenia sekwencyjnie
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!!