| | |
| | | } |
| | | |
| | | /** |
| | | * 仅当 key 不存在时写入(SETNX 语义),用于<b>幂等/防重复提交</b> |
| | | * <p> |
| | | * 2026-10-21 新增:问卷提交接口({@code /smartor/subtaskAnswer/saveQuestionAnswer})是 |
| | | * {@code @Async} 异步处理,患者端重复点击/网络重试会并发写多份明细,需要用原子占位挡掉。 |
| | | * |
| | | * @param key Redis 键 |
| | | * @param value 写入的值 |
| | | * @param timeout 过期时间 |
| | | * @param timeUnit 时间颗粒度 |
| | | * @return {@code true} = 占位成功(本次应继续处理);{@code false} = 已存在(重复请求,应忽略) |
| | | */ |
| | | public <T> boolean setCacheObjectIfAbsent(final String key, final T value, final long timeout, final TimeUnit timeUnit) { |
| | | Boolean ok = redisTemplate.opsForValue().setIfAbsent(key, value, timeout, timeUnit); |
| | | return Boolean.TRUE.equals(ok); |
| | | } |
| | | |
| | | /** |
| | | * 设置有效时间 |
| | | * |
| | | * @param key Redis键 |