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 есть другие важные методы:
Кроме того, стоит упомянуть о механизме кэширования. Если объект сохраняется или загружается, он сразу попадает в кэш для ускорения последующих операций. Координация:
<dependency>
<groupId>org.beykery</groupId>
<artifactId>rojo</artifactId>
<version>1.1.4</version>
</dependency>
Enjoy it.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )