为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2019-03-02 20:13:51
   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);     } }
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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

查看完整回答
反对 回复 2019-03-02
?
守候你守候我

TA贡献1802条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-03-02
  • 2 回答
  • 0 关注
  • 2803 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信