【发布时间】:2018-04-25 06:41:45
【问题描述】:
我使用 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 的文档说“一旦配置,这个类就是线程安全的。”
我必须明确添加线程安全功能吗?我在 StringRedisTemplate 或 RedisTemplate 源中看不到任何同步关键字。
【问题讨论】:
标签: java spring multithreading spring-boot redis