我正在考虑为我们的一个应用程序使用Azure Redis缓存。在某些情况下,我们需要存储纯JSON,这是最好的practices section clearly recommends against。我对Redis非常陌生,我正在研究可能的模式来满足我们的需求,我不确定我的方法是否违反了这些最佳实践。
我想要实现的模式是这样的:
- Cosmos数据库中的项目发生更改
1.解析更改摘要以查找更新的项目
1.更新后的物品被序列化并写入Redis
1.稍后查询系统时,请先寻找快取的项目。如果存在,请撷取并还原序列化。如果不存在,请查询Cosmos。
SET和GET将在应用程序的两个完全独立的部分中进行。永远不会有这样的场景,我将检索、修改和设置,因为Cosmos文档充当中间体,永远不会触发同时写入。当查询系统时,如果文档存在,则该高速缓存始终是最新的。
我真的搞不清楚的是,我的方法是否会带来上述数据丢失的风险:
更糟糕的是,许多应用程序只会获取整个JSON字符串,在应用程序中对它进行反序列化、操作、重新序列化和SET。这是一种反模式。使用这种方法真实的丢失数据的风险。
他们接着建议使用RedisJSON,它必须在数据库级别激活。
不幸的是,这似乎不可能与Azure Redis缓存,或者至少我找不到任何文档或任何选项,以做到这一点,同时创建资源,而不是当它已经创建.
1.是否可以将RedisJSON与Azure Redis缓存一起使用?
1.如果不是第一条,有没有其他推荐的方法来存储JSON数据,或者我建议的方法是一个可行的解决方案?
更新
我通过监听我希望缓存在Azure Function中的容器的更改提要来解决这个问题。这种模式有一个单独的应用程序示例写入一个唯一的文档,并且阅读完全独立发生,永远不会更改缓存的值。
如果插入或更新了整个文档,更改摘要将接收该文档,但不会删除该文档。由于接收了整个文档,因此在某些情况下可以轻松地该高速缓存无效,或者添加软删除值以完全删除该文档。
3条答案
按热度按时间t98cgbkg1#
是否可以将RedisJSON与Azure Redis缓存一起使用?
您可以使用Redis Cloud在Azure上使用RedisJSON轻松创建Redis,请参阅:https://redis.com/redis-enterprise-cloud/pricing/
iecba09b2#
是否可以将RedisJSON与Azure Redis缓存一起使用?
我认为Azure Redis https://learn.microsoft.com/en-us/answers/questions/709524/when-can-expected-redis-json-module-support-with-a.html不支持此功能
我还实现了一个Azure Redis缓存的解决方案来保存JSON文档,我将转义的json字符串保存到Redis值中
4c8rllxm3#
仅供参考,RedisJSON现在可以在Azure缓存中用于Redis:https://azure.microsoft.com/en-us/updates/public-preview-redisjson-available-in-azure-cache-for-redis-enterprise/