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

OSCHINA-MIRROR/doobo-union-cache

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

Union-cache

Основанный на springboot аннотированный кеш, удобный для интеграции различных видов кеша (redis, MemCache) без изменения существующей логики кода, предотвращающий такие проблемы, как лавинный эффект. По умолчанию основан на ConcurrentHashMap и реализует локальный кеш. Через реализацию ICacheService можно заменить его на redis или MemCache кеш.

Как добавить

 <dependency>
   <groupId>com.github.doobo</groupId>
   <artifactId>union-cache</artifactId>
   <version>1.3</version>
 </dependency>

Несколько аннотаций

// Чтение кеша: сначала проверяем, есть ли кеш по ключу, если есть, то считываем и возвращаем значение из кеша (метод не выполняется), иначе выполняем метод один раз и записываем результат в кеш
@RCache(prefix = "index", key = "key", expiredTime = 10)
@RCache(prefix = CacheConfig.USER_PREFIX, key = "#key", expiredTime = CacheConfig.USER_EXPIRED_TIME, unless = "#result == null || !#result.ok")

// Обновление кеша: используется для метода, после выполнения метода обновляем кеш
@UCache(prefix = CacheConfig.USER_PREFIX, key = "#key", expiredTime = CacheConfig.USER_EXPIRED_TIME)

// Удаление кеша: после выполнения метода удаляем кеш
@DCache(prefix = CacheConfig.USER_PREFIX, key = "#key", unless = "#result == null || !#result.ok")

Простое использование

@RestController
public class IndexController {

    /**
     * Каждые 30 секунд кеш становится недействительным, выполняется один раз UUID
     */
    @GetMapping
    @RCache(prefix = "uuid", key = "key", expiredTime = 30)
    public Map<String,Object> index(){
        return Collections.singletonMap("key", UUID.randomUUID().toString());
    }

    /**
     * Обновить кеш
     */
    @GetMapping("update")
    @UCache(prefix = "uuid", key = "#uuid", expiredTime = 10)
    public Map<String,Object> update(String uuid){
        return Collections.singletonMap("key", uuid);
    }

    /**
     * Удалить кеш
     */
    @GetMapping("delete")
    @DCache(prefix = "uuid", key = "key")
    public Boolean delete(String key){
        return Boolean.TRUE;
    }

    /**
     * Пакетное удаление
     */
    @GetMapping("batch")
    @DCache(prefix = "uuid", key = "*", batchClear = true)
    public Boolean batchClear(){
        return Boolean.TRUE;
    }
}

Реализация локального кеша

@Service
public class UnionLocalCacheService implements ICacheService{

    @Override
    public ResultTemplate<Boolean> setCache(UnionCacheRequest request) {
        InMemoryCacheUtils.cache().add(request.getKey(), request.getValue(), TimeUnit.SECONDS.toMillis(request.getExpire()));
        return ResultUtils.of(true);
    }

    @Override
    public ResultTemplate<Object> getCache(UnionCacheRequest request) {
        return ResultUtils.ofUnsafe(InMemoryCacheUtils.cache().get(request.getKey()));
    }

    @Override
    public ResultTemplate<Boolean> clearCache(UnionCacheRequest request) {
        InMemoryCacheUtils.cache().remove(request.getKey());
        return ResultUtils.of(true);
    }

    @Override
    public ResultTemplate<Integer> batchClear(UnionCacheRequest request) {
        int count = InMemoryCacheUtils.cache().batchClear(request.getKey());
        return ResultUtils.of(Integer.valueOf(count));
    }

    @Override
    public boolean enableCompress() {
        return Boolean.FALSE;
    }

    @Override
    public boolean enableCache() {
        return Boolean.TRUE;
    }
}

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

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

Введение

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

Обновления

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

Участники

все

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

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