1. 程式人生 > >java快取1

java快取1

controller:

package com.eyee.api.activity.controller;
import com.eyee.api.activity.Cache.TestCache;
import com.eyee.common.http.ResponseBase;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RequestMapping("/test")
@RestController
public class TestController {
    @Autowired
    TestCache testCache;
    @RequestMapping("test")
    public ResponseBase Test(@RequestParam("key") Integer key){
        List<String> data = testCache.test(key);
        return ResponseBase.succeeded().setData(data);
    }
}


cache:

package com.eyee.api.activity.Cache;

import com.eyee.api.activity.service.TestService;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@Service
public class TestCache {
    private final static Logger logger = LoggerFactory.getLogger(CouponInfoCache.class);
    static LoadingCache<Integer, List<String>> cache;
    @Autowired
    TestService service;
    //建立快取
    public TestCache() {
        System.out.println("init====");
        cache= CacheBuilder.newBuilder()
                // 設定快取初始個數
                .initialCapacity(1)
                // 設定快取定時重新整理
                .refreshAfterWrite(30, TimeUnit.MINUTES)
                // 設定快取一定時間沒有被訪問回收
                .expireAfterAccess(20,TimeUnit.MINUTES)
                // 設定快取個數
                .maximumSize(2)
                .build(new CacheLoader<Integer, List<String>>() {
                    @Override
                    public List load(Integer key) {
                        logger.info("重新整理快取key"+key);
                        return (List<String>) service.getdata(key).getData();
                    }
                });
    }

    //獲取快取
    public List<String> test(Integer key){
        List<String> list=null;
        try {
            list = cache.get(key);
        }catch (Exception e){
            logger.info("清除快取");
            cache.invalidate(key);
        }
        return list;
    }

    //清除快取
    public void  invalidateAll(){
        logger.info("begin invalidateAll------------");
        cache.invalidateAll();
        logger.info("end invalidateAll------------");
    }
}

service:

package com.eyee.api.activity.service;

import com.eyee.common.http.ResponseBase;

public interface TestService {
    public ResponseBase getdata(Integer aa);
}

ServiceImpl

package com.eyee.api.activity.impl;

import com.eyee.api.activity.repository.mysql.ActivityCouponRepository;
import com.eyee.api.activity.service.TestService;
import com.eyee.common.http.ResponseBase;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class TestServiceImpl implements TestService {
    @Autowired
    ActivityCouponRepository activityCouponRepository;
    @Override
    public ResponseBase getdata(Integer aa) {
        List<String> strings = activityCouponRepository.couponIds(aa);
        if(strings==null){
           return ResponseBase.succeeded().setData(null);
        }
        return ResponseBase.succeeded().setData(strings);
    }
}


Respository:

@Repository
public interface ActivityCouponRepository extends JpaRepository<ActivityCoupon,Integer> {
    @Query(value = "select couponid from coupon where activitytype =:activitytype",nativeQuery = true)
    List<String> couponIds(@Param("activitytype")Integer activitytype);

}

結果: