Как правильно генерировать идентификатор для Redis
Проблема
Если в JPA мы могли описать инкрементацию id поля сущности с помощью @GeneratedValue, то используя Redis нам не предоставляется возможности добавить обычную инкрементацию id из коробки, вместо этого генерируется строковый UUID на подобии такого 232c5383-9010-42dc-ab1a-c9094642a507.
Решение
Вариант 1
В Redis выделить дополнительное поле. Когда добавляется новая запись в БД, то достается значение этого поля -> идентификатору объекта присваивается его значение -> инкрементация значения поля -> сохранение.
Post
@RedisHash(post)
public class Post
private long id;
public Post(long id) {
this.id = id;
}
// getters & setters
Сервис
public void add() {
// Беру значение дополнительного поля из Redis
long identifier = redisTemplate.opsForValue().get("identifier");
// Запихиваю его в объект основным идентификатором
postRepository.save(new Post(identifier));
// Инкрементирую
redisTemplate.opsForValue().set("identifier", ++identifier);
}
Вариант 2
Добавить объекту второй идентификатор в виде значения дополнительного поля.
Post
@RedisHash(post)
public class Post
@Id
private String id;
private long identifier; // Кастомный инкрементный идентификатор
public Post(long identifier) {
this.identifier = identifier;
}
// getters & setters
Сервис
public void add() {
// Беру значение дополнительного поля из Redis
long identifier = redisTemplate.opsForValue().get("identifier");
// Запихиваю его в объект вторым идентификатором
postRepository.save(new Post(identifier));
// Инкрементирую
redisTemplate.opsForValue().set("identifier", ++identifier);
}
Заключение
Приемлем ли такой способ генерации уникального id объекта или же есть варианты куда интересней? Хотелось бы узнать как вы справляетесь с данным вопросом.