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

OSCHINA-MIRROR/xuan698400-xcache

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

xcache

Описание проекта

В эпоху микросервисов мы обычно используем распределённые кэши для повышения параллелизма системы. Например, memcached и Redis являются довольно известными решениями. Однако часто, как обычные бизнес-разработчики, они могут не хотеть заботиться о том, какой именно кеш используется внизу — memcached или Redis. И также удобные стратегии кеширования должны быть заключены в компонент кеша, чтобы использовать их программисты. Это и есть моя цель создания этого компонента. В будущем будет постепенно поддерживаться различные реализации, доступные пользователям.

Архитектура программы

Компонент состоит из двух модулей:

  1. Модуль client, который скрывает использование какого-либо конкретного кеша и предоставляет его через абстракцию. Например, сейчас поддерживаются spy клиент для memcached и xmemcached клиент.
  2. Модуль cache, который добавляет несколько стратегий кеширования поверх клиента, такие как: синхронное установление кеша, асинхронное установление кеша (защита от пробоя кеша и уменьшение времени ответа) и так далее.Особо следует отметить две стратегии модуля cache: синхронное и асинхронное установление кеша.
    (1) Стратегия синхронного установления кеша
    Часто используемый подход, когда получаем данные из кеша; если кеш отсутствует или истёк, то обращаемся к базе данных за данными, устанавливаем кеш и возвращаем данные. Все эти шаги выполняются в главном потоке, что делает процесс простым и понятным, но есть недостаток — риск пробоя кеша. Когда кеш истёк, время ответа увеличивается из-за необходимости одновременного запроса к базе данных и установки кеша.
    (2) Стратегия асинхронного установления кеша
    При получении данных из кеша, если кеш отсутствует, то используется стратегия синхронного установления кеша. Если же кеш существует, но истёк, то главный поток возвращает истёкшие данные из кеша, а затем запускается новый поток для запроса к базе данных и обновления кеша. Между тем проверяется наличие других запросов к тому же ключу, чтобы гарантировать, что одновременно не происходит повторной установки кеша. Этот подход позволяет избежать пробоя кеша на одном сервере, время ответа при истечении кеша становится короче, но недостаток заключается в использовании дополнительного пула потоков, а также в том, что при истечении кеша возвращаются истёкшие данные.#### Версии
  3. V1.0 поддерживает реализацию клиента для memcached (поддерживаются spy и xmemcached).

Поддержка Maven

<dependency>
    <groupId>com.xuanner</groupId>
    <artifactId>xcache-core</artifactId>
    <version>1.0</version>
</dependency>

Инструкция по использованию

  1. API использования модуля client:
```java
/**
 * Получение spy клиента
 *
 * @return spy клиент
 */
public static CacheClient getSpyClient() {
    SpyClientConfig config = new SpyClientConfig();
    config.setHost("xxx");
    config.setPort(bk11211);
    config.setUsername("xxx");
    config.setPassword("xxx");
    return new CacheClientBuilder().config(config).build();
}
## Получение клиентской библиотеки xmemcached

```java
/**
 * Получение клиента xmemcached
 *
 * @return Клиентская библиотека xmemcached
 */
public static CacheClient getXmemcacheClient() {
    XMemcachedClientConfig config = new XMemcachedClientConfig();
    config.setHost("xxx");
    config.setPort(bk11211);
    config.setUsername("xxx");
    config.setPassword("xxx");
    return new CacheClientBuilder().config(config).build();
}
```

### Класс тестирования клиента

```java
public class ClientTest {

    private CacheClient cacheClient;

    @Before
    public void setup() {
        cacheClient = getSpyClient();
    }

    @Test
    public void test() {
        // Удаление данных
        cacheClient.delete("testKey");
        // Установка данных
        cacheClient.put("testKey", "testValue", 2000, TimeUnit.MILLISECONDS);
        // Получение данных
        String testValue = (String) cacheClient.get("testKey");
    }
}
```
```

2. API модуля кэширования:

```java
## Глобальная конфигурация кэша

```java
/**
 * Получение глобальной конфигурации кэша
 *
 * @return Конфигурация кэша
 */
public static GlobalCacheConfig getGlobalCacheConfig() {
    GlobalCacheConfig globalCacheConfig = new GlobalCacheConfig();
    globalCacheConfig.setAppName("xuannerApp");
    globalCacheConfig.setAppCacheVersion(1);
    return globalCacheConfig;
}
```## Описание

### Создание кэша

Метод `getCache` создает объект кэша с использованием стратегии передачи.

```java
public static Cache<String> getCache(String strategy) {
    return new CacheBuilder<String>()
            .setCacheClient(getSpyClient())
            .setCacheLoader(getCacheLoader())
            .setGlobalCacheConfig(getGlobalCacheConfig())
            .setModuleCacheConfig(getModuleCacheConfig())
            .build(strategy);
}
```

### Класс тестирования кэша

Класс `CacheTest` использует метод `setup`, чтобы установить кэш с асинхронной стратегией.

```java
public class CacheTest {

    private Cache<String> cache;

    @Before
    public void setup() {
        // ASYNC — асинхронная стратегия кэширования, SIMPLE — синхронная стратегия кэширования
        cache = getCache(CacheBuilder.ASYNC);
    }
}```    @Test
    public void test() {
        // Удаление записи из кэша
        cache.delete("testKey");

        // Получение значения из кэша, если запись отсутствует, вызывается метод `get` интерфейса `CacheLoader`
        // для получения данных, после чего данные автоматически кэшируются и возвращаются
        cache.get("testKey");

        // Установка значения в кэше, что также вызывает метод `set` интерфейса `CacheLoader`
        // для получения данных, после чего данные автоматически кэшируются
        cache.set("testKey");
    }
}
```

#### Документация

Документация доступна по адресу: https://apidoc.gitee.com/xuan698400/xcache

#### Контактная информация
1. Имя: Ху Ан
2. Электронная почта: javaandswing@163.com
3. QQ: 349309307
4. Личный блог: xuanner.com

Комментарии ( 0 )

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

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xuan698400-xcache.git
git@api.gitlife.ru:oschina-mirror/xuan698400-xcache.git
oschina-mirror
xuan698400-xcache
xuan698400-xcache
master