提问一个简单的RedisTemplate问题

对于String类型很容易设置原子性的过期时间

public void set(String key, Object value, long timeout, TimeUnit unit) {
        if(timeout>0){
            redisTemplate.opsForValue().set(key, value, timeout, unit);
        }else{
            redisTemplate.opsForValue().set(key, value);
        }
    }

但是Hash、Set类型没有设置值和过期时间的原子操作,这种怎么处理呢

public void hset(String key, Object field, Object value, long expire, TimeUnit timeUnit) {
        redisTemplate.opsForHash().put(key, field, value);
        if (expire > 0) {
            redisTemplate.expire(key, expire, timeUnit);
        }
    }

我们现在是这样做的,有几个缺点和困惑:

  1. 但是针对已经存在的key进行操作的话,会重置key的过期时间
  2. 设置过期时间的操作执行失败造成永久的key,有没有必要使用try…catch,捕捉异常删除该key然后返回boolean类型的结果呢?

最后想白嫖一下大家的思路

请登录后发表评论