【发布时间】:2021-08-26 15:52:36
【问题描述】:
我正在考虑将 Azure Redis 缓存用于我们的一个应用程序。我们需要存储纯JSON,在某些情况下最好practices section clearly recommends against。我对 Redis 很陌生,我正在研究可能的模式以满足我们的要求,我不确定我的方法是否违反了这些最佳实践。
我要实现的模式是这样的:
- Cosmos 数据库中的项目发生更改
- 为更新的项目解析更改提要
- 更新的项被序列化并写入 Redis
- 以后查询系统时,先查找缓存项。如果存在,则检索和反序列化。如果不存在,请查询 Cosmos。
SET 和 GET 将在应用程序的两个完全独立的部分中进行。永远不会有我会检索、修改和设置的情况,因为 Cosmos 文档充当中间人并且永远不会触发同时写入。查询系统时,如果存在文档,则期望缓存始终是最新的。
我无法真正弄清楚的是我的方法是否存在上述数据丢失的风险:
更糟糕的是,许多应用程序只会获取整个 JSON 字符串,对其进行反序列化、操作、重新序列化并在应用程序中再次对其进行设置。这是一种反模式。使用这种方法存在丢失数据的风险。
他们继续建议RedisJSON,必须在数据库级别激活。
不幸的是,Azure Redis 缓存似乎无法做到这一点,或者至少我在创建资源时或创建资源时都找不到任何文档或任何选项。
- 是否可以将 RedisJSON 与 Azure Redis 缓存一起使用?
- 如果不是 #1,是否有其他推荐的方法来使用 Redis 存储 JSON 数据,或者我建议的方法是可能的解决方案吗?
更新
我通过监听我想缓存在 Azure 函数中的容器的更改源解决了这个问题。这种模式有一个单独的应用程序实例写入一个唯一的文档,并且读取完全独立发生并且永远不会更改缓存的值。
如果插入或更新但未删除,则更改提要接收整个文档。由于接收到整个文档,在某些情况下很容易使缓存无效或添加软删除值以将其完全删除。
【问题讨论】: