Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring数据Redis SET命令支持EX和NX_Spring_Redis - Fatal编程技术网

Spring数据Redis SET命令支持EX和NX

Spring数据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

使用

我的用例:

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(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);
返回模板;
}
}