2. SpringBoot 와 캐 시 (spring 캐 시 추상)
27818 단어 SpringBoot캐 시
Cache
캐 시 인터페이스, 캐 시 작업 정의: RedisCache, EhCacheCache, ConcurrentMapCache 등
CacheManager
캐 시 관리자, 각종 캐 시 구성 요 소 를 관리 합 니 다.
@Cacheable
주로 방법 설정 에 따라 방법의 요청 매개 변수 에 따라 그 결 과 를 캐 시 할 수 있 습 니 다.
@CacheEvict
캐 시 비우 기
@CachePut
보증 방법 이 호출 되 고 캐 시 되 기 를 원 하 며 캐 시 를 업데이트 합 니 다.
@EnableCaching
주석 기반 캐 시 열기
keyGenerator
캐 시 데 이 터 는 정책 을 만 들 수 있 습 니 다.
serialize
캐 시 데 이 터 는 value 생 성 정책 입 니 다.
동작 (redis 캐 시)
1. xml 의 좌표 의존
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.2.4.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
<version>2.2.2.RELEASEversion>
dependency>
2. yml 파일 설정
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/tables_mysql
username: sdfds
password: 2312
type: com.alibaba.druid.pool.DruidDataSource
redis:
jpa:
hibernate:
#
ddl-auto: updata
# SQL
show-sql: true
# redis
host: 118.24.44.169
3. redis 사용자 정의 직렬 화
@Configuration
public class MyRedisConfig {
/**
* redis
* @param * @param redisConnectionFactory
* @return org.springframework.data.redis.core.RedisTemplate
*/
// user
@Bean
public RedisTemplate<Object, User> UserRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, User> template = new RedisTemplate<Object, User> ();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<User> serializer = new Jackson2JsonRedisSerializer<User>(User.class);
template.setDefaultSerializer(serializer);
return template;
}
//
@Bean
public RedisTemplate<Object, dept> deptRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, dept> template = new RedisTemplate<Object, dept> ();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<dept> serializer = new Jackson2JsonRedisSerializer<dept>(dept.class);
template.setDefaultSerializer(serializer);
return template;
}
// user cacheManager
@Bean
public RedisCacheManager UserCacheManager(RedisTemplate<Object, User> UserRedisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(UserRedisTemplate);
//key
// , cacheName
cacheManager.setUsePrefix(true);
return cacheManager;
}
// cacheManager
@Bean
@Primary //
public RedisCacheManager UserCacheManager(RedisTemplate<Object, dept> deptRedisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(deptRedisTemplate);
//key
// , cacheName
cacheManager.setUsePrefix(true);
return cacheManager;
}
}
4. 비 즈 니스 계층 코드
@CacheConfig( cacheNames ="emp",cacheManager ="UserCacheManager" ) // , ,
@Service
public class UserService {
@Autowired
Usermaper usermaper;
@Resource("UserCacheManager")
RedisCacheManager UserCacheManager;
@Autowired
RedisTemplate redisTemplate;
@Autowired
RedisTemplate<Object, User> UserRedisTemplate;
/*
* , , ,
* :
* root
cacheNames/value: ;
key : Key: 。 1- ;
getUser[id]=#root.methodName+"["+#id+"]"
keyGenerator :key , key ID
key /keyGenerator :
cacheManager: , cacheResolver
condition:
#a0>1: >1
unless: ; unless true; ;
sync: ( unless)
*
* */
@Cacheable(cacheNames = {"emp"},condition = "#id>0",key = "#id",unless="#result==null")
public User getUser(Integer id ){
System.out.println(" "+id+" ");
User user = usermaper.getById(id);
return user;
}
//
public user getuser01(Integer id){
System.out.println(" "+id+" ");
User user = usermaper.getById(id);
//
Cache emp = UserCacheManager.getCache("emp");
//
emp.put("1",user);
return user;
}
/* key key
* */
@CachePut(cacheNames = {"emp"},key = "#result.id")
public User updata(User user){
usermaper.updateDept(user);
return user;
}
/*** allEntries = true;//
* beforeInvocation = false;
* : ;
* */
@CacheEvict(cacheNames = {"emp"},beforeInvocation = false,key= "#id")
public void delete(Integer id){
usermaper.deleteById(id);
}
/* */
@Caching(
cacheable = { @Cacheable(cacheNames = {"emp"},condition = "#id>0",key = "#id")},
put = {
@CachePut(cacheNames = {"emp"},key = "#result.id"),
@CachePut(cacheNames = {"emp"},key = "#result.lastName")
},
evict = {
@CacheEvict(cacheNames = {"emp"},beforeInvocation = false,key= "#id")
}
)
public User getUsers(Integer id ){
System.out.println(" "+id+" ");
User user = usermaper.getById(id);
return user;
}
//
public void test02(){
User user =new User();
// , JDK , Redis
redisTemplate.opsForValue().set("emp-01","getUsers");
/*21. json
* 1) json
* 2)redisTemplate ,
* */
UserRedisTemplate.opsForValue().set("emp-01","getUsers");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.