🎨 #1522 开放平台优化redis存储配置类,同时对应的 spring boot starter 模块增加新特性

This commit is contained in:
Mario Luo
2020-04-19 22:36:04 +08:00
committed by GitHub
parent 7ace417364
commit 585bd94b8a
10 changed files with 303 additions and 249 deletions

View File

@@ -1,10 +1,12 @@
package me.chanjar.weixin.open.api.impl;
import me.chanjar.weixin.common.util.locks.JedisDistributedLock;
import lombok.NonNull;
import me.chanjar.weixin.common.redis.JedisWxRedisOps;
import me.chanjar.weixin.common.redis.WxRedisOps;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.util.Pool;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
/**
@@ -12,163 +14,127 @@ import java.util.concurrent.locks.Lock;
*/
public class WxOpenInRedisConfigStorage extends AbstractWxOpenInRedisConfigStorage {
protected final Pool<Jedis> jedisPool;
private final WxRedisOps redisOps;
public WxOpenInRedisConfigStorage(Pool<Jedis> jedisPool) {
this.jedisPool = jedisPool;
this(jedisPool, null);
}
public WxOpenInRedisConfigStorage(Pool<Jedis> jedisPool, String keyPrefix) {
this.jedisPool = jedisPool;
public WxOpenInRedisConfigStorage(@NonNull Pool<Jedis> jedisPool, String keyPrefix) {
this(new JedisWxRedisOps(jedisPool), keyPrefix);
}
public WxOpenInRedisConfigStorage(@NonNull WxRedisOps redisOps, String keyPrefix) {
this.redisOps = redisOps;
this.keyPrefix = keyPrefix;
}
public WxOpenInRedisConfigStorage(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
@Override
public String getComponentVerifyTicket() {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(this.componentVerifyTicketKey);
}
return redisOps.getValue(this.componentVerifyTicketKey);
}
@Override
public void setComponentVerifyTicket(String componentVerifyTicket) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.set(this.componentVerifyTicketKey, componentVerifyTicket);
}
redisOps.setValue(this.componentVerifyTicketKey, componentVerifyTicket, Integer.MAX_VALUE, TimeUnit.SECONDS);
}
@Override
public String getComponentAccessToken() {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(this.componentAccessTokenKey);
}
return redisOps.getValue(this.componentAccessTokenKey);
}
@Override
public boolean isComponentAccessTokenExpired() {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.ttl(this.componentAccessTokenKey) < 2;
}
Long expire = redisOps.getExpire(this.componentAccessTokenKey);
return expire == null || expire < 2;
}
@Override
public void expireComponentAccessToken() {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.expire(this.componentAccessTokenKey, 0);
}
redisOps.expire(this.componentAccessTokenKey, 0, TimeUnit.SECONDS);
}
@Override
public void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.setex(this.componentAccessTokenKey, expiresInSeconds - 200, componentAccessToken);
}
redisOps.setValue(this.componentAccessTokenKey, componentAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public String getAuthorizerRefreshToken(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(this.getKey(this.authorizerRefreshTokenKey, appId));
}
return redisOps.getValue(this.getKey(this.authorizerRefreshTokenKey, appId));
}
@Override
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.set(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken);
}
redisOps.setValue(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken, 0, TimeUnit.SECONDS);
}
@Override
public String getAuthorizerAccessToken(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(this.getKey(this.authorizerAccessTokenKey, appId));
}
return redisOps.getValue(this.getKey(this.authorizerAccessTokenKey, appId));
}
@Override
public boolean isAuthorizerAccessTokenExpired(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.ttl(this.getKey(this.authorizerAccessTokenKey, appId)) < 2;
}
Long expire = redisOps.getExpire(this.getKey(this.authorizerAccessTokenKey, appId));
return expire == null || expire < 2;
}
@Override
public void expireAuthorizerAccessToken(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.expire(this.getKey(this.authorizerAccessTokenKey, appId), 0);
}
redisOps.expire(this.getKey(this.authorizerAccessTokenKey, appId), 0, TimeUnit.SECONDS);
}
@Override
public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.setex(this.getKey(this.authorizerAccessTokenKey, appId), expiresInSeconds - 200, authorizerAccessToken);
}
redisOps.setValue(this.getKey(this.authorizerAccessTokenKey, appId), authorizerAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public String getJsapiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(this.getKey(this.jsapiTicketKey, appId));
}
return redisOps.getValue(this.getKey(this.jsapiTicketKey, appId));
}
@Override
public boolean isJsapiTicketExpired(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.ttl(this.getKey(this.jsapiTicketKey, appId)) < 2;
}
Long expire = redisOps.getExpire(this.getKey(this.jsapiTicketKey, appId));
return expire == null || expire < 2;
}
@Override
public void expireJsapiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.expire(this.getKey(this.jsapiTicketKey, appId), 0);
}
redisOps.expire(this.getKey(this.jsapiTicketKey, appId), 0, TimeUnit.SECONDS);
}
@Override
public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.setex(this.getKey(this.jsapiTicketKey, appId), expiresInSeconds - 200, jsapiTicket);
}
redisOps.setValue(this.getKey(this.jsapiTicketKey, appId), jsapiTicket, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public String getCardApiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.get(this.getKey(this.cardApiTicket, appId));
}
return redisOps.getValue(this.getKey(this.cardApiTicket, appId));
}
@Override
public boolean isCardApiTicketExpired(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
return jedis.ttl(this.getKey(this.cardApiTicket, appId)) < 2;
}
Long expire = redisOps.getExpire(this.getKey(this.cardApiTicket, appId));
return expire == null || expire < 2;
}
@Override
public void expireCardApiTicket(String appId) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.expire(this.getKey(this.cardApiTicket, appId), 0);
}
redisOps.expire(this.getKey(this.cardApiTicket, appId), 0, TimeUnit.SECONDS);
}
@Override
public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) {
try (Jedis jedis = this.jedisPool.getResource()) {
jedis.setex(this.getKey(this.cardApiTicket, appId), expiresInSeconds - 200, cardApiTicket);
}
redisOps.setValue(this.getKey(this.cardApiTicket, appId), cardApiTicket, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public Lock getLockByKey(String key) {
return new JedisDistributedLock(jedisPool, getKey(lockKey, key));
return redisOps.getLock(key);
}
}

View File

@@ -1,128 +1,140 @@
package me.chanjar.weixin.open.api.impl;
import java.util.concurrent.TimeUnit;
import lombok.NonNull;
import me.chanjar.weixin.common.redis.RedissonWxRedisOps;
import me.chanjar.weixin.common.redis.WxRedisOps;
import org.redisson.api.RedissonClient;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
/**
* @author yangyidian
* @date 2020/01/06
**/
public class WxOpenInRedissonConfigStorage extends AbstractWxOpenInRedisConfigStorage{
public class WxOpenInRedissonConfigStorage extends AbstractWxOpenInRedisConfigStorage {
private RedissonClient redissonClient;
private final WxRedisOps redisOps;
public WxOpenInRedissonConfigStorage(RedissonClient redissonClient, String keyPrefix) {
this.keyPrefix = keyPrefix;
this.redissonClient = redissonClient;
}
public WxOpenInRedissonConfigStorage(@NonNull RedissonClient redissonClient, String keyPrefix) {
this(new RedissonWxRedisOps(redissonClient), keyPrefix);
}
public WxOpenInRedissonConfigStorage(RedissonClient redissonClient) {
this.redissonClient = redissonClient;
}
public WxOpenInRedissonConfigStorage(@NonNull RedissonClient redissonClient) {
this(redissonClient, null);
}
@Override
public String getComponentVerifyTicket() {
Object value = redissonClient.getBucket(this.componentVerifyTicketKey).get();
return value == null ? null : value.toString();
}
private WxOpenInRedissonConfigStorage(@NonNull WxRedisOps redisOps, String keyPrefix) {
this.redisOps = redisOps;
this.keyPrefix = keyPrefix;
}
@Override
public void setComponentVerifyTicket(String componentVerifyTicket) {
redissonClient.getBucket(this.componentVerifyTicketKey).set(componentVerifyTicket);
}
@Override
public String getComponentVerifyTicket() {
return redisOps.getValue(this.componentVerifyTicketKey);
}
@Override
public String getComponentAccessToken() {
Object value = redissonClient.getBucket(this.componentAccessTokenKey).get();
return value == null ? null : value.toString();
}
@Override
public void setComponentVerifyTicket(String componentVerifyTicket) {
redisOps.setValue(this.componentVerifyTicketKey, componentVerifyTicket, Integer.MAX_VALUE, TimeUnit.SECONDS);
}
@Override
public boolean isComponentAccessTokenExpired() {
return redissonClient.getBucket(this.componentAccessTokenKey).remainTimeToLive() < 2;
}
@Override
public String getComponentAccessToken() {
return redisOps.getValue(this.componentAccessTokenKey);
}
@Override
public void expireComponentAccessToken() {
redissonClient.getBucket(this.componentAccessTokenKey).expire(0, TimeUnit.SECONDS);
}
@Override
public boolean isComponentAccessTokenExpired() {
Long expire = redisOps.getExpire(this.componentAccessTokenKey);
return expire == null || expire < 2;
}
@Override
public void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds) {
redissonClient.getBucket(this.componentAccessTokenKey).set(componentAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public void expireComponentAccessToken() {
redisOps.expire(this.componentAccessTokenKey, 0, TimeUnit.SECONDS);
}
@Override
public String getAuthorizerRefreshToken(String appId) {
Object value = redissonClient.getBucket(this.getKey(this.authorizerRefreshTokenKey, appId)).get();
return value == null ? null : value.toString();
}
@Override
public void updateComponentAccessToken(String componentAccessToken, int expiresInSeconds) {
redisOps.setValue(this.componentAccessTokenKey, componentAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) {
redissonClient.getBucket(this.getKey(this.authorizerRefreshTokenKey, appId)).set(authorizerRefreshToken);
}
@Override
public String getAuthorizerRefreshToken(String appId) {
return redisOps.getValue(this.getKey(this.authorizerRefreshTokenKey, appId));
}
@Override
public String getAuthorizerAccessToken(String appId) {
Object value = redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).get();
return value == null ? null : value.toString();
}
@Override
public void setAuthorizerRefreshToken(String appId, String authorizerRefreshToken) {
redisOps.setValue(this.getKey(this.authorizerRefreshTokenKey, appId), authorizerRefreshToken, 0, TimeUnit.SECONDS);
}
@Override
public boolean isAuthorizerAccessTokenExpired(String appId) {
return redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).remainTimeToLive() < 2;
}
@Override
public String getAuthorizerAccessToken(String appId) {
return redisOps.getValue(this.getKey(this.authorizerAccessTokenKey, appId));
}
@Override
public void expireAuthorizerAccessToken(String appId) {
redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).expire(0, TimeUnit.SECONDS);
}
@Override
public boolean isAuthorizerAccessTokenExpired(String appId) {
Long expire = redisOps.getExpire(this.getKey(this.authorizerAccessTokenKey, appId));
return expire == null || expire < 2;
}
@Override
public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) {
redissonClient.getBucket(this.getKey(this.authorizerAccessTokenKey, appId)).set(authorizerAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public void expireAuthorizerAccessToken(String appId) {
redisOps.expire(this.getKey(this.authorizerAccessTokenKey, appId), 0, TimeUnit.SECONDS);
}
@Override
public String getJsapiTicket(String appId) {
Object value = redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).get();
return value == null ? null : value.toString();
}
@Override
public void updateAuthorizerAccessToken(String appId, String authorizerAccessToken, int expiresInSeconds) {
redisOps.setValue(this.getKey(this.authorizerAccessTokenKey, appId), authorizerAccessToken, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public boolean isJsapiTicketExpired(String appId) {
return redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).remainTimeToLive() < 2;
}
@Override
public String getJsapiTicket(String appId) {
return redisOps.getValue(this.getKey(this.jsapiTicketKey, appId));
}
@Override
public void expireJsapiTicket(String appId) {
redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).expire(0, TimeUnit.SECONDS);
}
@Override
public boolean isJsapiTicketExpired(String appId) {
Long expire = redisOps.getExpire(this.getKey(this.jsapiTicketKey, appId));
return expire == null || expire < 2;
}
@Override
public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) {
redissonClient.getBucket(this.getKey(this.jsapiTicketKey, appId)).set(jsapiTicket, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public void expireJsapiTicket(String appId) {
redisOps.expire(this.getKey(this.jsapiTicketKey, appId), 0, TimeUnit.SECONDS);
}
@Override
public String getCardApiTicket(String appId) {
Object value = redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).get();
return value == null ? null : value.toString();
}
@Override
public void updateJsapiTicket(String appId, String jsapiTicket, int expiresInSeconds) {
redisOps.setValue(this.getKey(this.jsapiTicketKey, appId), jsapiTicket, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public boolean isCardApiTicketExpired(String appId) {
return redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).remainTimeToLive() < 2;
}
@Override
public String getCardApiTicket(String appId) {
return redisOps.getValue(this.getKey(this.cardApiTicket, appId));
}
@Override
public void expireCardApiTicket(String appId) {
redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).expire(0 ,TimeUnit.SECONDS);
}
@Override
public boolean isCardApiTicketExpired(String appId) {
Long expire = redisOps.getExpire(this.getKey(this.cardApiTicket, appId));
return expire == null || expire < 2;
}
@Override
public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) {
redissonClient.getBucket(this.getKey(this.cardApiTicket, appId)).set(cardApiTicket, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public void expireCardApiTicket(String appId) {
redisOps.expire(this.getKey(this.cardApiTicket, appId), 0, TimeUnit.SECONDS);
}
@Override
public void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds) {
redisOps.setValue(this.getKey(this.cardApiTicket, appId), cardApiTicket, expiresInSeconds - 200, TimeUnit.SECONDS);
}
@Override
public Lock getLockByKey(String key) {
return redisOps.getLock(key);
}
}