| @@ -1,11 +1,12 @@ | |||||
| package me.chanjar.weixin.mp.api; | package me.chanjar.weixin.mp.api; | ||||
| import redis.clients.jedis.Jedis; | import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisPool; | |||||
| /** | /** | ||||
| * 基于Redis的微信配置provider | * 基于Redis的微信配置provider | ||||
| * | * | ||||
| * @author lly835 | |||||
| * @author nickwong | |||||
| */ | */ | ||||
| @SuppressWarnings("hiding") | @SuppressWarnings("hiding") | ||||
| public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { | public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { | ||||
| @@ -16,75 +17,115 @@ public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage { | |||||
| private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_"; | private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_"; | ||||
| protected Jedis jedis; | |||||
| /** | |||||
| * 使用连接池保证线程安全 | |||||
| */ | |||||
| protected final JedisPool jedisPool; | |||||
| private String accessTokenKey; | |||||
| private String jsapiTicketKey; | |||||
| private String cardapiTicketKey; | |||||
| public WxMpInRedisConfigStorage(JedisPool jedisPool) { | |||||
| this.jedisPool = jedisPool; | |||||
| } | |||||
| /** | |||||
| * 每个公众号生成独有的存储key | |||||
| * | |||||
| * @param appId | |||||
| */ | |||||
| @Override | |||||
| public void setAppId(String appId) { | |||||
| super.setAppId(appId); | |||||
| this.accessTokenKey = ACCESS_TOKEN_KEY.concat(appId); | |||||
| this.jsapiTicketKey = JSAPI_TICKET_KEY.concat(appId); | |||||
| this.cardapiTicketKey = CARDAPI_TICKET_KEY.concat(appId); | |||||
| } | |||||
| @Override | @Override | ||||
| public String getAccessToken() { | public String getAccessToken() { | ||||
| return jedis.get(ACCESS_TOKEN_KEY.concat(appId)); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| return jedis.get(accessTokenKey); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public boolean isAccessTokenExpired() { | public boolean isAccessTokenExpired() { | ||||
| return jedis.ttl(ACCESS_TOKEN_KEY.concat(appId)) < 2; | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| return jedis.ttl(accessTokenKey) < 2; | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { | public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) { | ||||
| jedis.set(ACCESS_TOKEN_KEY.concat(appId), accessToken); | |||||
| jedis.expire(ACCESS_TOKEN_KEY.concat(appId), expiresInSeconds - 200); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| jedis.setex(accessTokenKey, expiresInSeconds - 200, accessToken); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public void expireAccessToken() { | public void expireAccessToken() { | ||||
| jedis.expire(ACCESS_TOKEN_KEY.concat(appId), 0); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| jedis.expire(accessTokenKey, 0); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public String getJsapiTicket() { | public String getJsapiTicket() { | ||||
| return jedis.get(JSAPI_TICKET_KEY.concat(appId)); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| return jedis.get(jsapiTicketKey); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public boolean isJsapiTicketExpired() { | public boolean isJsapiTicketExpired() { | ||||
| return jedis.ttl(JSAPI_TICKET_KEY.concat(appId)) < 2; | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| return jedis.ttl(jsapiTicketKey) < 2; | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { | public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) { | ||||
| jedis.set(JSAPI_TICKET_KEY.concat(appId), jsapiTicket); | |||||
| jedis.expire(JSAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| jedis.setex(jsapiTicketKey, expiresInSeconds - 200, jsapiTicket); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public void expireJsapiTicket() { | public void expireJsapiTicket() { | ||||
| jedis.expire(JSAPI_TICKET_KEY.concat(appId), 0); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| jedis.expire(jsapiTicketKey, 0); | |||||
| } | |||||
| } | } | ||||
| /** | |||||
| * 卡券api_ticket | |||||
| */ | |||||
| @Override | @Override | ||||
| public String getCardApiTicket() { | public String getCardApiTicket() { | ||||
| return jedis.get(CARDAPI_TICKET_KEY.concat(appId)); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| return jedis.get(cardapiTicketKey); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public boolean isCardApiTicketExpired() { | public boolean isCardApiTicketExpired() { | ||||
| return jedis.ttl(CARDAPI_TICKET_KEY.concat(appId)) < 2; | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| return jedis.ttl(cardapiTicketKey) < 2; | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) { | public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) { | ||||
| jedis.set(CARDAPI_TICKET_KEY.concat(appId), cardApiTicket); | |||||
| jedis.expire(CARDAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200); | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| jedis.setex(cardapiTicketKey, expiresInSeconds - 200, cardApiTicket); | |||||
| } | |||||
| } | } | ||||
| @Override | @Override | ||||
| public void expireCardApiTicket() { | public void expireCardApiTicket() { | ||||
| jedis.expire(CARDAPI_TICKET_KEY.concat(appId), 0); | |||||
| } | |||||
| public void setJedis(Jedis jedis) { | |||||
| this.jedis = jedis; | |||||
| try (Jedis jedis = this.jedisPool.getResource()) { | |||||
| jedis.expire(cardapiTicketKey, 0); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||