我使用带Spring Boot的Shedlock和Redis作为锁提供者。
一切似乎都很正常。但是,当我在任务执行过程中手动访问Redis时,我看不到锁的特定密钥。
在Redis CLI上,我执行KEYS *以获取所有密钥。
这是意料之中的,还是我错过了任何配置?
@Bean
public LockProvider lockProvider() {
return new JedisLockProvider(redisPoolPrimary.getPool(), RedisPoolPrimary.ENV_ID);
}@Component
@Slf4j
public class RedisPoolPrimary {
public static final String ENV_ID = "MyAppId";
private JedisPool pool;
public RedisPoolPrimary(@Value("${spring.redis.url}") String redisCloudUrl,
@Value("${meetical.redis.jedis.JEDIS_POOL_MAX_TOTAL}") int jedisPoolMaxTotal,
@Value("${meetical.redis.jedis.JEDIS_POOL_MAX}") int jedisPoolMax,
@Value("${meetical.redis.jedis.JEDIS_POOLMAX_IDLE}") int jedisPoolMaxIdle
) {
URI redisUrl = URI.create(redisCloudUrl);
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(jedisPoolMaxTotal);
poolConfig.setMinIdle(jedisPoolMax);
poolConfig.setMaxIdle(jedisPoolMaxIdle);
pool = new JedisPool(poolConfig, redisUrl);
}
public JedisPool getPool() {
return pool;
}
}@Scheduled(cron = "${cache.scheduler.cron.expression}")
@SchedulerLock(name = "refreshUserCachesLock", lockAtLeastForString = FIVE_MINUTES, lockAtMostForString = SIXTY_MINUTES)
public void refreshCacheOfAllInstances() {
// should be only run once every x hours for all spring boot app nodes
// however during execution of the task no KEY seems to be in Redis - does the lock mechanism work?
}使用的依赖项
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>4.12.0</version>
</dependency>
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-redis-jedis</artifactId>
<version>4.12.0</version>
</dependency>发布于 2020-10-23 15:58:53
我没有用过jedis,只用过普通的spring包装器shedlock-provider-redis-spring。如果您的配置工作正常,那么您应该能够通过使用redis-cli查询keys *来获取。如果没有,尝试手动形成密钥并签入redis,shedlock在JedisLockProvider.java中使用下面的方法来形成一个进入redis的密钥。
static String buildKey(String lockName, String env) {
return String.format("%s:%s:%s", KEY_PREFIX, env, lockName);
}在JedisLockProvider.java中检查下面的行,它实际维护Redis中的锁信息。
https://stackoverflow.com/questions/62515289
复制相似问题