我使用诸如spring boot,jpa和java 8之类的技术。我有一个问题,如何检查缓存是否为空,我应该向数据库发送查询以将其重新加载(如何检查是否需要重新加载)缓存)?
答案 0 :(得分:1)
由于您对使用哪种类型的缓存尚不清楚? JPA使用的第一级缓存是持久性上下文。 实体管理器保证在单个持久性上下文中,对于任何特定的数据库行,将只有一个对象实例。但是,可以在另一个用户的事务中管理同一实体,因此您应该使用乐观锁定或悲观锁定。
如果您指的是二级缓存,则此二级缓存是出于性能原因。此二级缓存位于实体管理器和数据库之间。持久性上下文共享缓存,从而使第二级缓存在整个应用程序中可用。由于实体已加载到共享缓存中并从那里可用,因此数据库通信量大大减少了。因此,实际上,如果发生缓存未命中,您就不必担心从数据库中重新加载数据。
现在,如果您要实现自己的逻辑来实现缓存,那么您需要对缓存的实际工作方式以及LRU,MRU等不同的缓存算法进行更多的研究(我个人不建议这样做,因为您可以使用现有的可用提供程序(例如ehcache,redis,hazelcast)仅用于二级缓存的几个名称)