Redis и Spring Data с самого начала. Часть 3
В первой части мы рассмотрели NoSQL базы данных, в частности Key-Value NoSQL БД, и обсудили одну из самых популярных NoSQL БД — Redis. Во второй части мы узнали, что такое Spring Data и Spring Data Redis Repositories. В этой части посмотрим на альтернативный вариант подключения к Redis с помощью различных
Spring Data Redis Operations
Корневым интерфейсом является RedisOperations и из него можно получить все остальные, которые предоставляются на большинство типов данных Redis. С помощью таких классов можно более специфично реализовывать mapping сущностей, а также более эффективно утилизировать место в Redis.
Итак, напишем свой собственный репозиторий на их основе. Сама сущность:
public class SimplePerson { private String id; private String name; public SimplePerson(String name) { this.id = UUID.randomUUID().toString(); this.name = name; } public SimplePerson(String id, String name) { this.id = id; this.name = name; } // геттеры и сеттеры }
Допустим, мы хотим хранить эту сущность не в виде хэша, а компактно в виде строк (name) по ключу. Соответственно наш репозиторий:
@Repository @Transactional public class SimplePersonRepository { private final RedisOperations<String, String> ops; public SimplePersonRepository(RedisOperations<String, String> ops) { this.ops = ops; } public SimplePerson findById(String id) { String name = ops.opsForValue().get(id); return new SimplePerson(id, name); } public String save(SimplePerson person) { ops.opsForValue().set(person.getId(), person.getName()); return person.getId(); } }
Обратите внимание, что мы из корневого класса
Ну и наконец, код программы с бином RedisTemplate:
@SpringBootApplication public class Main { @Bean public RedisOperations redisOperations(LettuceConnectionFactory connectionFactory) { RedisTemplate<String, String> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(connectionFactory); redisTemplate.setEnableTransactionSupport(true); return redisTemplate; } public static void main(String[] args) { ApplicationContext context = SpringApplication.run(Main.class, args); SimplePersonRepository repository = context.getBean(SimplePersonRepository.class); String id = repository.save(new SimplePerson("Cidre")); SimplePerson person = repository.findById(id); System.out.println(person.getName()); } }
Оставлю вам удовольствие самостоятельно разобраться, например, нужна или нет аннотация
127.0.0.1:6379> keys * 1) "87c5a482-11e9-4ef4-8bb4-c77f5873aaa9" 127.0.0.1:6379> type 87c5a482-11e9-4ef4-8bb4-c77f5873aaa9 string 127.0.0.1:6379> get 87c5a482-11e9-4ef4-8bb4-c77f5873aaa9 "Cidre"
На этом всё. Успешного использования Redis!