我有一个缓存对象,用于保存跨模块共享的变量。
并发线程正在访问&使用使用变量锁定的缓存处理程序写入该缓存对象以保持缓存完整性。
缓存将所有变量保存在唯一的会话ID下。创建新会话ID时,必须引用旧会话ID,将一些变量复制到新会话中。
某些会话ID也将同时运行。
我需要在所有并发线程完成引用后立即清除缓存,并且所有新会话都将变量从它复制到会话中。
问题......
我不知道何时清除缓存是安全的。
我有数百个线程进行可变时间的API调用。新会话将产生新线程。我不能只看活动线程来确定何时清除缓存。
我的缓存将增长到无限大小&最终导致程序崩溃。
我认为这一定是个常见问题。那些比我更聪明的人经历过我。
任何想法如何最好地解决这个问题?
答案 0 :(得分:1)
您可以通过锁定解决此问题...创建一个清理线程,有时会锁定缓存(获取您拥有的所有锁)并清除它,然后释放锁..
(如果你对缓存的不同部分有很多锁,你也可以一块一块地锁定和清除缓存......)