Skip to content

Commit 0e580a0

Browse files
nickwongwongbinarywang
authored andcommitted
Fix issue binarywang#335: 重构WxMpInRedisConfigStorage,改用连接池
1 parent 3875635 commit 0e580a0

File tree

1 file changed

+65
-24
lines changed

1 file changed

+65
-24
lines changed
Lines changed: 65 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package me.chanjar.weixin.mp.api;
22

33
import redis.clients.jedis.Jedis;
4+
import redis.clients.jedis.JedisPool;
45

56
/**
67
* 基于Redis的微信配置provider
78
*
8-
* @author lly835
9+
* @author nickwong
910
*/
1011
@SuppressWarnings("hiding")
1112
public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage {
@@ -16,75 +17,115 @@ public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage {
1617

1718
private final static String CARDAPI_TICKET_KEY = "wechat_cardapi_ticket_";
1819

19-
protected Jedis jedis;
20+
/**
21+
* 使用连接池保证线程安全
22+
*/
23+
protected final JedisPool jedisPool;
24+
25+
private String accessTokenKey;
26+
27+
private String jsapiTicketKey;
28+
29+
private String cardapiTicketKey;
30+
31+
public WxMpInRedisConfigStorage(JedisPool jedisPool) {
32+
this.jedisPool = jedisPool;
33+
}
34+
35+
/**
36+
* 每个公众号生成独有的存储key
37+
*
38+
* @param appId
39+
*/
40+
@Override
41+
public void setAppId(String appId) {
42+
super.setAppId(appId);
43+
this.accessTokenKey = ACCESS_TOKEN_KEY.concat(appId);
44+
this.jsapiTicketKey = JSAPI_TICKET_KEY.concat(appId);
45+
this.cardapiTicketKey = CARDAPI_TICKET_KEY.concat(appId);
46+
}
2047

2148
@Override
2249
public String getAccessToken() {
23-
return jedis.get(ACCESS_TOKEN_KEY.concat(appId));
50+
try (Jedis jedis = this.jedisPool.getResource()) {
51+
return jedis.get(accessTokenKey);
52+
}
2453
}
2554

2655
@Override
2756
public boolean isAccessTokenExpired() {
28-
return jedis.ttl(ACCESS_TOKEN_KEY.concat(appId)) < 2;
57+
try (Jedis jedis = this.jedisPool.getResource()) {
58+
return jedis.ttl(accessTokenKey) < 2;
59+
}
2960
}
3061

3162
@Override
3263
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) {
33-
jedis.set(ACCESS_TOKEN_KEY.concat(appId), accessToken);
34-
jedis.expire(ACCESS_TOKEN_KEY.concat(appId), expiresInSeconds - 200);
64+
try (Jedis jedis = this.jedisPool.getResource()) {
65+
jedis.setex(accessTokenKey, expiresInSeconds - 200, accessToken);
66+
}
3567
}
3668

3769
@Override
3870
public void expireAccessToken() {
39-
jedis.expire(ACCESS_TOKEN_KEY.concat(appId), 0);
71+
try (Jedis jedis = this.jedisPool.getResource()) {
72+
jedis.expire(accessTokenKey, 0);
73+
}
4074
}
4175

4276
@Override
4377
public String getJsapiTicket() {
44-
return jedis.get(JSAPI_TICKET_KEY.concat(appId));
78+
try (Jedis jedis = this.jedisPool.getResource()) {
79+
return jedis.get(jsapiTicketKey);
80+
}
4581
}
4682

4783
@Override
4884
public boolean isJsapiTicketExpired() {
49-
return jedis.ttl(JSAPI_TICKET_KEY.concat(appId)) < 2;
85+
try (Jedis jedis = this.jedisPool.getResource()) {
86+
return jedis.ttl(jsapiTicketKey) < 2;
87+
}
5088
}
5189

5290
@Override
5391
public synchronized void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) {
54-
jedis.set(JSAPI_TICKET_KEY.concat(appId), jsapiTicket);
55-
jedis.expire(JSAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200);
92+
try (Jedis jedis = this.jedisPool.getResource()) {
93+
jedis.setex(jsapiTicketKey, expiresInSeconds - 200, jsapiTicket);
94+
}
5695
}
5796

5897
@Override
5998
public void expireJsapiTicket() {
60-
jedis.expire(JSAPI_TICKET_KEY.concat(appId), 0);
99+
try (Jedis jedis = this.jedisPool.getResource()) {
100+
jedis.expire(jsapiTicketKey, 0);
101+
}
61102
}
62103

63-
/**
64-
* 卡券api_ticket
65-
*/
66104
@Override
67105
public String getCardApiTicket() {
68-
return jedis.get(CARDAPI_TICKET_KEY.concat(appId));
106+
try (Jedis jedis = this.jedisPool.getResource()) {
107+
return jedis.get(cardapiTicketKey);
108+
}
69109
}
70110

71111
@Override
72112
public boolean isCardApiTicketExpired() {
73-
return jedis.ttl(CARDAPI_TICKET_KEY.concat(appId)) < 2;
113+
try (Jedis jedis = this.jedisPool.getResource()) {
114+
return jedis.ttl(cardapiTicketKey) < 2;
115+
}
74116
}
75117

76118
@Override
77119
public synchronized void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) {
78-
jedis.set(CARDAPI_TICKET_KEY.concat(appId), cardApiTicket);
79-
jedis.expire(CARDAPI_TICKET_KEY.concat(appId), expiresInSeconds - 200);
120+
try (Jedis jedis = this.jedisPool.getResource()) {
121+
jedis.setex(cardapiTicketKey, expiresInSeconds - 200, cardApiTicket);
122+
}
80123
}
81124

82125
@Override
83126
public void expireCardApiTicket() {
84-
jedis.expire(CARDAPI_TICKET_KEY.concat(appId), 0);
85-
}
86-
87-
public void setJedis(Jedis jedis) {
88-
this.jedis = jedis;
127+
try (Jedis jedis = this.jedisPool.getResource()) {
128+
jedis.expire(cardapiTicketKey, 0);
129+
}
89130
}
90131
}

0 commit comments

Comments
 (0)