Redis
Redis (Remote Dictionary Server) — це in-memory база даних ключ-значення з відкритим вихідним кодом, що використовується для зберігання структурованих даних. Вона підтримує різні типи даних, такі як рядки, списки, множини, упорядковані множини з діапазонами, хеші, бітові масиви, потоки і т. д.
Redis широко використовується для кешування, управління сесіями, систем обміну повідомленнями, черг задач та інших сценаріїв, що вимагають високої продуктивності і низької затримки.
Redis з SpringBoot
Розглянемо простий проєкт на SpringBoot, що використовує Redis, як базу даних.
Створимо такий проєкт:
Створимо entity Cat:
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
@Data
@RedisHash("cat")
public class Cat {
@Id
private String id;
private String name;
private Integer age;
public Cat(String name, Integer age) {
this.name = name;
this.age = age;
}
}
Зверніть увагу на атрибут @RedisHash
Відповідний DTO-об'єкт:
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@Data
@AllArgsConstructor
@Builder
public class CatDto {
private String name;
private Integer age;
}
Мапер для перетворення DTO в entity:
import com.example.demo_redis.domain.Cat;
import com.example.demo_redis.dto.CatDto;
import org.springframework.stereotype.Component;
@Component
public class CatMapper {
public Cat toCatEntity(CatDto catDto){
return new Cat(catDto.getName(),catDto.getAge());
}
}
Репозиторій:
import com.example.demo_redis.domain.Cat;
import org.springframework.data.repository.CrudRepository;
public interface CatRepository
extends CrudRepository <Cat,String> {
}
Простий сервіс:
import com.example.demo_redis.domain.Cat;
import com.example.demo_redis.dto.CatDto;
import com.example.demo_redis.mapper.CatMapper;
import com.example.demo_redis.repository.CatRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class CatService {
private final CatRepository catRepository;
private final CatMapper catMapper;
public Iterable<Cat> getAll(){
return catRepository.findAll();
}
public Optional<Cat> getById(String id){
return catRepository.findById(id);
}
public Cat save(CatDto catDto){
return catRepository.save(catMapper.toCatEntity(catDto));
}
}
І контроллер:
import com.example.demo_redis.domain.Cat;
import com.example.demo_redis.dto.CatDto;
import com.example.demo_redis.service.CatService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Optional;
@RestController
@RequestMapping("/apicat")
@Slf4j
@RequiredArgsConstructor
public class CatController {
private final CatService catService;
@GetMapping("cats")
public ResponseEntity<Iterable<Cat>> getAllCats(){
return new ResponseEntity<>(catService.getAll(), HttpStatus.OK);
}
@GetMapping("cats/{id}")
public ResponseEntity < ? > getCatById(@PathVariable String id){
Optional < Cat> catOptional = catService.getById(id);
if(catOptional.isPresent()) {
return new ResponseEntity<>(catOptional.get(),HttpStatus.OK);
}else {
return ResponseEntity.notFound().build();
}
}
@PostMapping("cats")
public ResponseEntity<?> addCat(@RequestBody CatDto catDto){
return ResponseEntity.ok(catService.save(catDto));
}
}
Запуск Redis на Docker локально
Створення і запуск контейнера:
docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest
Вхід в контейнер:
docker exec -it 31fb8534a97a /bin/bash
де 31fb8534a97a - id, яке можна дізнатися командою:
docker ps
Використати redis-cli всередині контейнера:
redis-cli
Параметри застосунка
У файл application.properties додати наступні рядки:
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=my-secret
Тестування
Після успішного запуску можна додати записи в базу даних за допомогою, наприклад, Postman
Після входу в Redis можна подивитися список ключів командою:
KEYS *
В результаті має бути приблизно такий рядок:
"cat:bcced506-8799-4817-bacf-0904ac6aa7c2"
Подивитися вміст запису можна командою:
HGETALL "cat:bcced506-8799-4817-bacf-0904ac6aa7c2"
Результат буде приблизно таким:
1) "_class"
2) "com.example.demo_redis.domain.Cat"
3) "age"
4) "3"
5) "id"
6) "bcced506-8799-4817-bacf-0904ac6aa7c2"
7) "name"
8) "Tom"
Коментарі
Дописати коментар