sa-token-dao-redisx: 升级 redisx 为 1.4.7(set 指令改为 setex),解决并发下 getTimeout 值可能与 set 行为不同步的问题

This commit is contained in:
noear 2023-04-13 12:30:38 +08:00
parent 1c4cc85cc7
commit dccf0433d6
3 changed files with 16 additions and 88 deletions

View File

@ -24,8 +24,8 @@
<jakarta-servlet-api.version>6.0.0</jakarta-servlet-api.version>
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
<solon.version>2.2.3</solon.version>
<noear-redisx.version>1.4.5</noear-redisx.version>
<noear-snack3.version>3.2.54</noear-snack3.version>
<noear-redisx.version>1.4.7</noear-redisx.version>
<noear-snack3.version>3.2.65</noear-snack3.version>
<jfinal.version>4.9.17</jfinal.version>
<jboot.version>3.14.4</jboot.version>
<commons-pool2.version>2.5.0</commons-pool2.version>

View File

@ -40,13 +40,7 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDao {
*/
@Override
public void set(String key, String value, long timeout) {
if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
// 判断是否为永不过期
if (timeout == SaTokenDao.NEVER_EXPIRE) {
redisBucket.store(key, value, (int) SaTokenDao.NEVER_EXPIRE);
} else {
if (timeout > 0 || timeout == SaTokenDao.NEVER_EXPIRE) {
redisBucket.store(key, value, (int) timeout);
}
}
@ -57,10 +51,6 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDao {
@Override
public void update(String key, String value) {
long expire = getTimeout(key);
// -2 = 无此键
if (expire == SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
this.set(key, value, expire);
}
@ -85,19 +75,10 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDao {
*/
@Override
public void updateTimeout(String key, long timeout) {
// 判断是否想要设置为永久
if (timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getTimeout(key);
if (expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.set(key, this.get(key), timeout);
}
return;
}
if (redisBucket.exists(key)) {
redisBucket.delay(key, (int) timeout);
}
}
/**
@ -113,13 +94,7 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDao {
*/
@Override
public void setObject(String key, Object object, long timeout) {
if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
// 判断是否为永不过期
if (timeout == SaTokenDao.NEVER_EXPIRE) {
redisBucket.storeAndSerialize(key, object);
} else {
if (timeout > 0 || timeout == SaTokenDao.NEVER_EXPIRE) {
redisBucket.storeAndSerialize(key, object, (int) timeout);
}
}
@ -130,10 +105,6 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDao {
@Override
public void updateObject(String key, Object object) {
long expire = getObjectTimeout(key);
// -2 = 无此键
if (expire == SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
this.setObject(key, object, expire);
}
@ -158,19 +129,10 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDao {
*/
@Override
public void updateObjectTimeout(String key, long timeout) {
// 判断是否想要设置为永久
if (timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getObjectTimeout(key);
if (expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.setObject(key, this.getObject(key), timeout);
}
return;
}
if (redisBucket.exists(key)) {
redisBucket.delay(key, (int) timeout);
}
}
/**

View File

@ -56,13 +56,7 @@ public class SaTokenDaoOfRedisJson implements SaTokenDao {
*/
@Override
public void set(String key, String value, long timeout) {
if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
// 判断是否为永不过期
if (timeout == SaTokenDao.NEVER_EXPIRE) {
redisBucket.store(key, value, (int) SaTokenDao.NEVER_EXPIRE);
} else {
if (timeout > 0 || timeout == SaTokenDao.NEVER_EXPIRE) {
redisBucket.store(key, value, (int) timeout);
}
}
@ -73,10 +67,6 @@ public class SaTokenDaoOfRedisJson implements SaTokenDao {
@Override
public void update(String key, String value) {
long expire = getTimeout(key);
// -2 = 无此键
if (expire == SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
this.set(key, value, expire);
}
@ -101,19 +91,10 @@ public class SaTokenDaoOfRedisJson implements SaTokenDao {
*/
@Override
public void updateTimeout(String key, long timeout) {
// 判断是否想要设置为永久
if (timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getTimeout(key);
if (expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.set(key, this.get(key), timeout);
}
return;
}
if (redisBucket.exists(key)) {
redisBucket.delay(key, (int) timeout);
}
}
/**
@ -129,13 +110,11 @@ public class SaTokenDaoOfRedisJson implements SaTokenDao {
*/
@Override
public void setObject(String key, Object object, long timeout) {
if (timeout == 0 || timeout <= SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
if (timeout > 0 || timeout == SaTokenDao.NEVER_EXPIRE) {
String value = ONode.serialize(object);
set(key, value, timeout);
}
}
/**
* 更新Object (过期时间不变)
@ -143,10 +122,6 @@ public class SaTokenDaoOfRedisJson implements SaTokenDao {
@Override
public void updateObject(String key, Object object) {
long expire = getObjectTimeout(key);
// -2 = 无此键
if (expire == SaTokenDao.NOT_VALUE_EXPIRE) {
return;
}
this.setObject(key, object, expire);
}
@ -171,19 +146,10 @@ public class SaTokenDaoOfRedisJson implements SaTokenDao {
*/
@Override
public void updateObjectTimeout(String key, long timeout) {
// 判断是否想要设置为永久
if (timeout == SaTokenDao.NEVER_EXPIRE) {
long expire = getObjectTimeout(key);
if (expire == SaTokenDao.NEVER_EXPIRE) {
// 如果其已经被设置为永久则不作任何处理
} else {
// 如果尚未被设置为永久那么再次set一次
this.setObject(key, this.getObject(key), timeout);
}
return;
}
if (redisBucket.exists(key)) {
redisBucket.delay(key, (int) timeout);
}
}
/**