猿问

RedisTemplate里DefaultHashOperations等是线程安全的吗?

   public <HK, HV> HashOperations<K, HK, HV> opsForHash() {        return new DefaultHashOperations(this);
    }

每次用opsForHash()都会新生成一个DefaultHashOperations
如果一个RedisUtil里只生成一个DefaultHashOperations, 每次都调用这一个,有何问题?
DefaultHashOperations,DefaultSetOperations等是线程安全的吗?

@Componentpublic final class RedisUtil {    private HashOperations<String, Object, Object> hashOperations; 

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;    @PostConstruct
    void init(){
        hashOperations = redisTemplate.opsForHash();
    }    public Set<Object> allFields(String key) {        return redisTemplate.opsForHash().keys(key);
    }    public List<Object> allValues(String key) {        return redisTemplate.opsForHash().values(key);
    }
}


千巷猫影
浏览 2804回答 2
2回答

手掌心

应该说是线程安全的,因为 DefaultHashOperations 共享的数据是 RedisTemplate, 而这个成员变量是Once configured, this class is thread-safe., 也就是一旦配置完成就是线程安全的。

守候你守候我

但实际上DefaultHashOperations的构造是轻量级的,同时考虑RedisTemplate的扩展实现可能会有不同,也就没有必要做缓存了,做了反而不方便扩展。
随时随地看视频慕课网APP

相关分类

Java
我要回答