【发布时间】:2021-10-20 11:23:58
【问题描述】:
如果我有一个缓存 (IMemoryCache) 字典
也许其他解决方案是从缓存中获取列表并创建一个锁,然后在锁内完成插入数据库流。是否有其他解决方案或解决此类问题的最佳方法?
一些解释:这是一个长链问题。我正在使用 Cassandra DB 进行存储。上面的 Cache 以及 DB 中的 Table 都与消息队列有关。如果我从 DB (Cassandra) 中删除了很多内容,它会在表中生成很多墓碑,并且在某些时候,如果我通过阈值,它将无法查询表。我通过将表的结构从每条未读消息 1 行更改为每个用户 1 行并带有列列表来解决这个问题。但这现在给缓存带来了问题。为什么要使用缓存?好吧,因为 Cassandra 在写操作上真的很快,但对于读操作却不是真的(如果我有 10.000 个打开的 Web 套接字到 2 个服务器实例和 1 个 cassandra 节点,读/写只是挂起,我的服务器进入线程池饥饿状态,不断获得更多线程但不做任何工作),所以我在启动时读取一次,然后只使用缓存中的列表而不是数据库中的列表将数据写入 Cassandra,以避免从数据库中重新读取它们。通过做这一切,我遇到了一致性、奇怪的缓存层和异步突变的问题。任何建议都会有所帮助。
【问题讨论】:
标签: c# asp.net-core caching cassandra