![]() |
1
3
是的,使用该代码肯定有可能两个不同的请求不会从缓存中获得任何信息,因此这两个请求都会重新加载数据。如果要避免这种情况,需要同步获取数据的整个操作。 同步访问的一种方法是使用类似于以下内容的代码:
在获取锁之前检查是否已获取数据的想法,是为了避免在高负载的环境中过度锁定。如果它不在那里,我们需要再次检查锁内部,因为另一个线程可能在我们获取锁时获取了数据。 |
![]() |
2
2
是的,这是可能的,而且这不是一个理想的模式。作为快速修复,您可以在缓存上建立互斥锁作为快速修复,但理想情况下,更好的设计是让缓存充当中介加载昂贵的数据本身。这个设计模式比我所提到的要多得多,但它应该能让你开始。 |
![]() |
a a · 为什么在这个可重入锁示例中需要引用计数? 3 年前 |
![]() |
Grant · goroutines有高空闲唤醒电话 3 年前 |
![]() |
hoaz · 如何安全地清理并发映射 7 年前 |
![]() |
Alanpatchi · int基元类型的volatile声明 7 年前 |