问题描述
是否可以利用Redis为.NET创建后写或直写式缓存?理想情况下,透明的缓存是由单个进程写入的,并且支持从数据库加载丢失的数据,并每隔一段时间持久保存脏块?
我已经搜查了好几个小时了,也许是google-fu太生疏了,但是我找不到类似的东西,但这似乎是一种常见情况。
所以我基本上有两个问题:
-
a)发送“请求”功能并等待数据显示在Redis中(编写器进程想要更新一个块,因此它通知数据进程将这些块加载到Redis中,然后等待这些块出现在缓存中),
b)数据服务按固定间隔轮询脏块(查找脏块,原子地清除脏标志,然后保存到磁盘)?
解决方法
是的,Redis支持通过RGSync(这是RedisGears的配方)进行后台写入和通过缓存写入。查看演示here。
其他链接,取决于您使用的是Enterprise还是OpenSource版本:https://docs.redislabs.com/latest/modules/redisgears/
,我不确定我是否完全理解您的问题,但您可以尝试查看我最近发布的库 FusionCache ⚡?。
您可以通过使用 2 个功能的组合来实现您想要的(但同样,也许我弄错了):fail-safe + advanced timeouts 和后台工厂完成。
简而言之:你可以缓存一些东西,比方说,2 分钟后会调用一个工厂来刷新数据,但是,如果出现问题(异常、超时等),过期的值将被再次使用,直到工厂可以在后台完成,之后它会立即更新缓存。
对于丢失的缓存条目同样有效:由于避免了 multiple concurrent factory calls 的优化,相同缓存键的所有并发调用者将被阻塞,并且只有一个工厂将被执行。
另一个有趣的功能是支持可选的分布式 2nd level 缓存,无需执行任何操作即可自动管理并与本地缓存保持同步。
如果你愿意,请告诉我你的想法。
/无耻插头