1

是否可以利用 Redis 为 .NET 创建后写式或直写式缓存?理想情况下,透明缓存由单个进程写入并支持从数据库中加载丢失的数据,并每隔一段时间持久化脏块?

我已经搜索了几个小时,也许 google-fu 太生疏了,但我找不到类似的东西,但这似乎是一个常见的场景。

所以我基本上有两个问题:

  1. 有没有办法扩展 Redis(或这样的实现已经存在)以使其定期转发脏块或从持久存储中加载丢失的块?

  2. 如果不是,那么在 Redis 中实施的适当方法是什么:

    a) 发送“请求”功能并等待数据出现在 Redis 中(写入进程想要更新块,因此它通知数据进程将块加载到 Redis 中,然后等待块出现在缓存中) ,

    b) 数据服务定期轮询脏块(查找脏块,原子清除脏标志,保存到磁盘)?

4

2 回答 2

1

是的,Redis 通过 RGSync 支持 Write Behind 和 Write Through Cache,这是 RedisGears 的一个秘诀。在这里查看演示。

其他链接,取决于您使用的是企业版还是开源版:https ://docs.redislabs.com/latest/modules/redisgears/

https://redis.io/modules

于 2020-09-05T08:27:15.877 回答
1

我不确定我是否完全理解了您的问题,但您可以尝试查看我最近发布的库 FusionCache ⚡</a>。

您可以通过使用 2 个功能的组合来实现您想要的(但同样,也许我弄错了):故障安全+具有后台工厂完成的高级超时。

简而言之:你可以缓存一些东西,比如 2 分钟,然后调用工厂来刷新数据,但是如果出现问题(异常、超时等),过期的值将再次使用,直到工厂能够在后台完成,之后它将立即更新缓存。

这同样适用于缺少缓存条目:由于避免多个并发工厂调用的优化,相同缓存键的所有并发调用者将被阻止,并且只会执行一个工厂。

另一个有趣的功能是支持可选的分布式二级缓存,自动管理并与本地缓存保持同步,无需执行任何操作。

如果你愿意给它一个机会,请让我知道你的想法。

/无耻的插头

于 2021-01-14T15:21:41.700 回答