我们有一个消息应用程序,它维护一个未读/已读计数器。目前,我们将此值缓存一小时,如果用户点击应用程序并且缓存已过期,则会对数据库表进行计数以刷新缓存值。
问题是当大量用户同时访问并且缓存过期时,这实际上很常见,这给数据库带来了巨大的压力,需要同时实时进行所有计数。
我想找到一种方法来在我们添加或删除消息时在缓存中主动维护这个计数器,这样用户只会点击缓存的值并且它永远不会过期。新问题在于确保计数值保持同步,因为添加或删除会触发缓存更新的消息的系统可能会错过一些,因此这两个数字将不再同步。
我提出的一些选项:
每 X 更新一次强制刷新。这对活跃用户来说很好,但不太活跃的用户更有可能有不准确的计数,并且没有缓存到期,该计数会保留很长时间。
有一个更新计数的后台作业。这样做的问题是它将数据库资源花费在非活动用户上,这是低效且耗时的。
有没有人对这种类型的计数维护有任何一般性建议?