Spring数据Redis SET命令支持EX和NX
使用 我的用例: 127.0.0.1:6379>设置lock.foo运行NX ex20Spring数据Redis SET命令支持EX和NX,spring,redis,Spring,Redis,使用 我的用例: 127.0.0.1:6379>设置lock.foo运行NX ex20 然后检查Redis返回值是否为OK或(nil)看不到任何Spring模板值操作解决方案,因此我在连接org.springframework.data.Redis.connection.StringRedisConnection上执行了“本机”执行(java.lang.String,java.lang.String…) 然后由我负责处理参数和结果。使用RedisTemplate\execute(RedisCal
然后检查Redis返回值是否为OK或(nil)看不到任何Spring模板值操作解决方案,因此我在连接org.springframework.data.Redis.connection.StringRedisConnection上执行了“本机”执行(java.lang.String,java.lang.String…) 然后由我负责处理参数和结果。使用
RedisTemplate\execute(RedisCallback
方法,演示:
@Autowired
private RedisTemplate redisTemplate;
public void test() {
String redisKey = "lock.foo";
String value = "RUNNING";
long expire = 20L;
Boolean result = (Boolean) redisTemplate.execute((RedisCallback<Boolean>) connection -> {
byte[] redisKeyBytes = redisTemplate.getKeySerializer().serialize(redisKey);
byte[] valueBytes = redisTemplate.getValueSerializer().serialize(value);
Expiration expiration = Expiration.from(expire, TimeUnit.SECONDS);
return connection.set(redisKeyBytes, valueBytes, expiration, RedisStringCommands.SetOption.SET_IF_ABSENT);
});
System.out.println("result = " + result);
}
@Autowired
私有再贴现模板;
公开无效测试(){
String redisKey=“lock.foo”;
字符串值=“正在运行”;
长期有效期=20L;
布尔结果=(布尔)redisTemplate.execute((RedisCallback)连接->{
byte[]redisKeyBytes=redisTemplate.getKeySerializer().serialize(redisKey);
byte[]valueBytes=redisTemplate.getValueSerializer().serialize(值);
Expiration=Expiration.from(expire,TimeUnit.SECONDS);
返回connection.set(redisKeyBytes、valueBytes、expiration、RedisStringCommands.SetOption.set\u如果不存在);
});
System.out.println(“结果=”+结果);
}
RedisTemplate配置:
@Configuration
public class RedisConfig {
@Bean
public RedisSerializer<String> keySerializer() {
return new StringRedisSerializer();
}
@Bean
public RedisSerializer<Object> valueSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
@Bean
public RedisTemplate redisTemplate(RedisTemplate redisTemplate, RedisSerializer keySerializer, RedisSerializer valueSerializer) {
//set key serializer
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setHashKeySerializer(keySerializer);
//set value serializer
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashValueSerializer(valueSerializer);
return redisTemplate;
}
}
@配置
公共类RedisConfig{
@豆子
公共重新序列化程序keySerializer(){
返回新的StringRedisSerializer();
}
@豆子
公共重新序列化程序valueSerializer(){
返回新的GenericJackson2JsonRedisSerializer();
}
@豆子
公共RedisTemplate RedisTemplate(RedisTemplate RedisTemplate、RedisSerializer keySerializer、RedisSerializer valueSerializer){
//设置密钥序列化程序
redisTemplate.setKeySerializer(keySerializer);
redisTemplate.setHashKeySerializer(keySerializer);
//集值序列化程序
redisTemplate.setValueSerializer(valueSerializer);
redisTemplate.setHashValueSerializer(valueSerializer);
返回模板;
}
}