1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/beykery-rojo

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 7.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 08:09 fb7945a

rojo

rojo — это открытый проект на GitHub rojo, который был переработан для повышения эффективности и улучшения функциональности.

Проблема

При использовании java-клиента jedis для работы с Redis требуется выполнять ряд операций с ключами для сохранения объекта. Необходимо объединить значения атрибутов в ключ, а затем сохранить его в Redis. Это довольно трудоёмкий процесс.

Решение

Проект rojo призван упростить операции по сохранению объектов в Redis. Он предоставляет несколько аннотаций для анализа во время выполнения, которые позволяют разработчикам сосредоточиться на моделировании объектов, освобождая их от необходимости разрабатывать сложные ключи для атрибутов.

Использование

Пример кода:

@Entity
public class BaseEntity {

    @Id(Generator = "common::id")
    private long id;
    @Value(unique = true)
    private String name;

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

В этом примере класс BaseEntity использует несколько аннотаций. Аннотация @Entity указывает, что объект может быть сохранён в Redis. Аннотация @Id с параметром Generator определяет стратегию генерации идентификатора. По умолчанию используется пустая строка, что означает необходимость самостоятельного управления идентификатором. В данном случае используется стратегия common::id, которая автоматически генерирует идентификатор с помощью ключа Redis для автоматического увеличения.

Аннотация @Value может применяться к атрибутам базовых типов (byte, short, int, long, float, double, String), а также к элементам коллекций (Collection, List, Set) и Map. У неё есть несколько важных параметров. Если атрибут имеет базовый тип, можно указать его уникальность с помощью параметра unique. Например, атрибут name в классе BaseEntity является уникальным. При сохранении экземпляра BaseEntity проверяется наличие другого объекта с таким же значением name. Если такой объект существует, сохранение не выполняется.

Рассмотрим другой пример:

@Entity(Cache=true)
public class TestEntity extends BaseEntity {

    @Value
    private List<String> list;
    @Value
    private Set<Float> set;
    @Value
    private Map<String, Integer> map;
    @Value(sort = true, bigFirst = true, size = 100)
    private int age;

    // методы класса
}

Класс TestEntity наследуется от BaseEntity, поэтому атрибуты id и name совпадают. Кроме того, этот класс имеет четыре дополнительных атрибута: list, set, map и age. Атрибуты list, set и map представляют собой коллекции элементов базовых типов. Атрибут age имеет три параметра: sort, bigFirst и size. Они используются для сортировки при сохранении в упорядоченном списке. Параметр sort указывает на необходимость сортировки, bigFirst определяет порядок сортировки от большего к меньшему, а size задаёт общую длину списка сортировки (в данном примере длина равна 100).

Теперь рассмотрим, как сохранить экземпляр TestEntity в Redis:

Jedis je = new Jedis("localhost", 6379);
je.auth("4swardsman");
je.ping();
je.flushAll();
Repository re = new Repository(je);

Сначала создаётся экземпляр Repository, который принимает объект Jedis.

TestEntity ss = new TestEntity();
ss.setName("test" + i);
ss.setAge(i);
List<String> l = new ArrayList<String>();
l.add("fd");
l.add("akjl;sfd");
ss.setList(l);
Map<String, Integer> map = new HashMap<String, Integer>();
ss.setMap(map);
map.put("a", 1);
map.put("b", 2);
re.writeAndFlush(ss);

Здесь создаётся новый экземпляр TestEntity, устанавливаются значения его атрибутов, и вызывается метод writeAndFlush класса Repository для сохранения в Redis. Если сохранение успешно, возвращается положительное значение, которое становится идентификатором объекта ss.

Для загрузки объекта из Redis используется метод get:

ss = re.get(TestEntity.class, ss.getId());

Также у класса Repository есть другие важные методы:

  • long write(Object entity) — сохранение объекта без немедленной записи в базу данных. Обычно используется для пакетного сохранения нескольких объектов с последующей записью одним вызовом для повышения производительности.
  • boolean write(Class claz, long id, String p, Object v) — обновление значения свойства объекта без немедленного сохранения.
  • T get(Class claz, long id, String p) — получение значения отдельного свойства объекта.
  • void delete(Class claz, long id) — удаление объекта.
  • List rank(Class claz, String p, long start, long end) — получение списка ранжирования.

Кроме того, стоит упомянуть о механизме кэширования. Если объект сохраняется или загружается, он сразу попадает в кэш для ускорения последующих операций. Координация:

  <dependency>
      <groupId>org.beykery</groupId>
      <artifactId>rojo</artifactId>
      <version>1.1.4</version>
  </dependency>

Заключение

Enjoy it.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/beykery-rojo.git
git@api.gitlife.ru:oschina-mirror/beykery-rojo.git
oschina-mirror
beykery-rojo
beykery-rojo
master