2. SpringBoot 와 캐 시 (spring 캐 시 추상)

27818 단어 SpringBoot캐 시
글 목록
  • 몇 가지 중요 한 개념 과 캐 시 주석
  • 작업 (redis 캐 시)
  • 1. 몇 가지 중요 한 개념 과 캐 시 주석
    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");
    
        }
    }
    
    

    좋은 웹페이지 즐겨찾기