На основе аннотаций Spring Boot реализуется кэширование. Клиент использует lettuce.
@Cache — облегчённое кэширование, поддерживает настройку времени истечения срока действия для отдельного кэша и позволяет удалять кэш по префиксу.
Используется fastjson для сериализации и десериализации, данные хранятся в кэше в виде json-строки.
Может быть быстро использован в повседневных приложениях Spring Boot.
<dependency>
<groupId>com.dtguai</groupId>
<artifactId>dtguai-cache</artifactId>
<version>1.0.3</version>
</dependency>
#redis-cache 相关
spring:
redis:
database: 9
host: 192.168.14.108
port: 6379
# password:
# cluster:
# nodes:
# - 127.0.0.1:6379
# - 127.0.0.1:6380
# - 127.0.0.1:6381
# - 127.0.0.1:6382
lettuce:
pool:
# 连接池最大连接数 默认8 ,负数表示没有限制
max-active: 32
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
max-wait: -1
# 连接池中的最大空闲连接 默认8
max-idle: 8
# 连接池中的最小空闲连接 默认0
min-idle: 0
timeout: 3000
В классе запуска Spring Boot добавьте @EnableDtguaiCache
Параметр аннотации | Тип | Описание |
---|---|---|
key | Строка | Выражение для динамического вычисления ключа кэша |
expires | Целое число | Срок действия кэша в минутах, по умолчанию 10 минут |
parser | Class<? extends ICacheResultParser> | Класс для пользовательской обработки возвращаемого результата кэша |
generator | Class<? extends IKeyGenerator> | Класс для генерации пользовательских ключей кэша |
Параметр аннотации | Тип | Описание |
---|---|---|
pre | Строка | Очистить кэш с определённым префиксом ключа, например: pre = "1*" или pre = {"1*","2","3*"} |
key | Строка | Удалить определённый ключ кэша, например: key = "1" или key = {"1","2","3"} |
generator | Class<? extends IKeyGenerator> | Класс для генерации пользовательских ключей кэша |
Пример выражения | Описание | Пример |
---|---|---|
@Cache(key="user:{1}") public User getUserByAccount(String account) |
{1} представляет первый параметр {2} представляет второй параметр и т.д. |
Если account = ace, то key = user:ace |
@CacheClear(pre="user:{1.account}") User saveOrUpdate(User user) |
{1} представляет первый параметр {1.xx} представляет атрибут xx первого параметра |
Если account=ace, то key = user:ace |
CacheTest — основной класс запуска. service — пакет, содержащий примеры использования пользовательских выражений и результатов анализа, а также аннотаций.
Если в классе используется redisTemplate:
@Autowired
private RedisTemplate<String, String> redisTemplate;
Демонстрация основных операций: конкретные параметры см. в тестовом классе.
@Override
@Cache(key = "user:{1}")
public User get(String account) {
log.warn("Из метода get...");
return new User("太子", 42, account);
}
@Override
@Cache(key = "user:list")
public List<User> getList() {
log.warn("Из метода getLlist...");
List<User> users = new ArrayList<>(20);
for (int i = 0; i < 20; i++) {
User user = new User("陈雄", i, "cx911");
users.add(user);
}
return users;
}
@Override
@Cache(key = "user:set", parser = SetCacheResultParser.class)
public Set<User> getSet() {
log.warn("Из метода getSet...");
Set<User> users = new HashSet<>(20);
for (int i = 0; i < 20; i++) {
User user = new User("陈雄", i, "cx911");
users.add(user);
}
return users;
}
@Override
@Cache(key = "user:map:{1.age}:{2.age}:{3.name}")
public Map<String, User> getMap(Map<String, Object> m, List l, User u) {
log.warn("Из метода...");
Map<String, User> users = new HashMap<>(40);
for (int i = 0; i < 20; i++) {
User user = new User("陈雄", i, "cx911");
users.put(user.getAccount() + i, user);
}
return users;
}
@Override
//@CacheClear(key = "user:{1.age}:{1.name}:{1.account}", pre = "user", keys = "1,2,3,4")
//@CacheClear( pre = "user:map:{1.age},2,3", keys = "1,2,3,4")
@CacheClear(key = "1", pre = "2*")
public void save(User user) {
}
/**
* Обработка результатов карты
*/
public static class UserMapCacheResultParser implements CacheResultParser<HashMap<String, User>> {
@Override
public HashMap<String,
``` ```
parse(String value, Type returnType) {
return JSON.parseObject(value, returnType);
}
/
感谢作者:The Sun
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )