用于.NET的写后缓存的Redis可扩展性

问题描述

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

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

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

  1. 是否有一种方法可以扩展Redis(或已经存在这样的实现),使其以固定的间隔转发脏块或从持久性存储中加载丢失的块?

  2. 如果没有,那么在Redis中实现的合适方法是什么?

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

    b)数据服务按固定间隔轮询脏块(查找脏块,原子地清除脏标志,然后保存到磁盘)?

解决方法

是的,Redis支持通过RGSync(这是RedisGears的配方)进行后台写入和通过缓存写入。查看演示here

其他链接,取决于您使用的是Enterprise还是OpenSource版本:https://docs.redislabs.com/latest/modules/redisgears/

https://redis.io/modules

,

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

您可以通过使用 2 个功能的组合来实现您想要的(但同样,也许我弄错了):fail-safe + advanced timeouts 和后台工厂完成。

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

对于丢失的缓存条目同样有效:由于避免了 multiple concurrent factory calls 的优化,相同缓存键的所有并发调用者将被阻塞,并且只有一个工厂将被执行。

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

如果你愿意,请告诉我你的想法。

/无耻插头