>  기사  >  백엔드 개발  >  싱글톤 모드는 access_token 전역 캐시 문제를 어떻게 해결합니까?

싱글톤 모드는 access_token 전역 캐시 문제를 어떻게 해결합니까?

小云云
小云云원래의
2018-03-12 14:01:163037검색

처음에는 access_token을 데이터베이스에 넣고 획득할 때마다 만료 여부를 확인합니다. access_token의 유효기간과 방문횟수 문제를 해결할 수 있습니다. 그러나 최근 공식 계정을 시스템과 인터페이스하고 공식 계정의 데이터베이스를 취소해야 하는 경우가 있는데, 이때 access_token 등을 시스템 데이터베이스에 넣는 것은 적절하지 않습니다.

Xue Xilin이 작성한 이 기사의 이점: WeChat은 access_token 글로벌 캐싱 문제를 처리하고 싱글 모드 사용을 구현하여 access_token을 캐시합니다.

나중에 참고할 수 있도록 기억해두세요. ㅋㅋㅋ

public class TokenSingleton {
        //缓存accessToken 的Map  ,map中包含 一个accessToken 和 缓存的时间戳
         private Map<String, String> map = new HashMap<>();
         private TokenSingleton() {
         }
         private static TokenSi
ngleton single = null;
         // 静态工厂方法
         public static TokenSingleton getInstance() {
             if (single == null) {
                 single = new TokenSingleton();
             }
             return single;
         }
 
         public Map<String, String> getMap() {
             String time = map.get("time");
             String accessToken = map.get("access_token");
             Long nowDate = new Date().getTime();
             
             if (accessToken != null && time != null && nowDate - Long.parseLong(time) < 6000*1000) {
                 System.out.println("accessToken存在,且没有超时 , 返回单例");
             } else {
                 System.out.println("accessToken 超时 , 或者不存在 , 重新获取");
                 String access_token=JSSDKUtil.getAccessToken();
                 //这里是直接调用微信的API去直接获取 accessToken 和Jsapi_ticket 获取
                 String jsapi_token = JSSDKUtil.getTicket(access_token);
                 //"获取jsapi_token";
                 map.put("time", nowDate + "");
                 map.put("access_token", access_token);
                 map.put("jsapi_token", jsapi_token);
             }
             return map;
         }
         public void setMap(Map<String, String> map) {
             this.map = map;
         }
         public static TokenSingleton getSingle() {
             return single;
         }
         public static void setSingle(TokenSingleton single) {
             TokenSingleton.single = single;
         }

 }
관련 추천:

간단한 내용 MySQL 메모리(글로벌 캐시 + 스레드 캐시) 사용 지침 분석_MySQL

위 내용은 싱글톤 모드는 access_token 전역 캐시 문제를 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.