【发布时间】:2021-04-19 19:38:42
【问题描述】:
每当 mongodb 发生更改时,我都会使用更改流来使 redis 缓存保持最新。每当更改数据库时,我都会分两步更新缓存:
- 清除缓存
- 从头开始加载数据
代码:
redisTemplate.delete(BINDATA);
redisTemplate.opsForHash().putAll(BINDATA, binDataItemMap);
问题是在 prod 中这个设置可能很危险。由于 redis 是单线程的,因此事件有可能在多容器应用程序中以下列方式发生:
- 数据库更新发生
- redis中数据被清除
- 请求进来并查询一个空的redis缓存
- 数据被推送到redis中
理想情况下应该是这样:
- 数据库更新发生
- redis中数据被清除
- 数据被推送到redis中
- 请求进来并查询更新的 redis 缓存
redis 中的清除和更新操作如何作为一个块发生?
【问题讨论】:
标签: mongodb spring-boot redis spring-data-redis