Как правильно генерировать идентификатор для 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 объекта или же есть варианты куда интересней? Хотелось бы узнать как вы справляетесь с данным вопросом.


Ответы (0 шт):