我使用StringRedisTemplate将条目添加到redis,如下所示。
public void processSubmission(final String key, final Map<String, String> submissionDTO) {
final String hashKey = String.valueOf(Hashing.MURMUR_HASH.hash(key));
this.stringRedisTemplate.expire(key, 60, TimeUnit.MINUTES);
final HashOperations<String, String, String> ops = this.stringRedisTemplate.opsForHash();
Map<String, String> data = findByKey(key);
String json;
if (data != null) {
data.putAll(submissionDTO);
json = convertSubmission(data);
} else {
json = convertSubmission(submissionDTO);
}
ops.put(key, hashKey, json);
}
由于此操作可以在多个线程中执行,因此可能存在竞争条件导致数据丢失的情况。
文档说明了RedisTemplate&#34;配置完成后,这个类是线程安全的。&#34;
我是否必须明确添加线程安全功能?我没有在StringRedisTemplate或RedisTemplate源中看到任何同步关键字。
答案 0 :(得分:0)
线程安全并不代表某处有synchronized
个关键字。您可以编写没有synchronized
的线程安全代码,即使使用synchronized
,也可以轻松编写线程不安全的代码。
RedisTemplate
是线程安全的。所以你只需要确保processSubmission
是线程安全的。