Простая реализация кеша с понятием группы. Группа представляет собой упорядоченный набор пар ключ-значение, поддерживающий истечение срока действия ключей, что компенсирует недостатки redis list.
package com.qikenet.cache;
import java.util.Random;
public class CacheTest {
public static void main(String[] args) {
/**
* Концепция:
* Групповой кэш, в традиционных Redis и Memcached кэшированных контейнерах все ключи имеют вид key-value.
* Групповой кэш представляет собой добавление метки на внешнем уровне ключа-значения.
* Для сравнения с использованием списка, структура списка в Redis выглядит следующим образом, и отдельные элементы списка не могут иметь временные метки:
* abc
* 1
* 2
* 3
*
* В структуре GroupCache это выглядит так:
* abc
* a 1 10
* b 2 5
* c 3 1
* Первая строка: a — это ключ, 1 — значение, 10 — время жизни в секундах, то есть 10 секунд.
*/
}
}
GroupCacheFactory factory = new GroupCacheFactory();
// Получение группы
Group group1 = factory.group("group1");
group1.push("a", 123); // По умолчанию имеет бесконечное время жизни
group1.push("b", 321, 10); // Время жизни составляет 10 секунд // Проверка времени до истечения срока действия
System.out.println("Оставшееся время жизни элемента 'b' в группе 1: " + group1.ttl("b"));
// Проверка наличия значения
System.out.println("Существует ли 'a': " + group1.exist("a"));
System.out.println("Существует ли 'c': " + group1.exist("c"));
// Получение действительных ключей
System.out.println("Ключи группы 1: " + group1.getKeys());
// Получение действительных значений
System.out.println("Значения группы 1: " + group1.getValues());
// Получение значения по ключу
System.out.println("Получение значения по ключу 'a': " + group1.getValue("a"));
// Получение группы с установленной емкостью в 100, по умолчанию емкость равна 1000, данные между различными группами не совместимы
Group group2 = factory.group("group2", 100);
// Если количество данных больше, чем емкость, старые данные будут удалены
for (int i = 0; i < 101; i++) {
group2.push(String.valueOf(i), i, new Random().nextInt(10));
}
// Получение количества живых элементов
System.out.println("Размер группы 2: " + group2.size());
// Установка времени жизни элемента
group2.expire("2", 100);
// Удаление элемента
group2.delete("3");
System.out.println("Размер группы после удаления элемента: " + group2.size());
// Получение размера группы
System.out.println("Емкость группы 2: " + group2.getCapacity());
System.out.println(group2.getKeys());
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )