Caching 缓存缓存层中的所有实体并与数据库同步

Caching 缓存缓存层中的所有实体并与数据库同步,caching,model-view-controller,Caching,Model View Controller,是否有可能、可靠且安全地将所有实体缓存在分布式缓存中,并在更新时通知dao层?我可能的想法是 使用JPA2.1和Hibernate实现 创建持久化数据库时 持久化后,将其缓存到分布式缓存 将所有读取操作运河化到缓存 更新时通知dao层更新实体 是的,您可以设计一个 添加时:将数据持久化到数据库并添加到缓存 读取时:从缓存中读取数据,并将缓存未命中视为未命中 也存在于数据库中 更新时:更新数据库中的数据,然后更新缓存中的数据(反之亦然) 反之亦然) 删除时:从缓存中删除数据,然后从数据库中删除

是否有可能、可靠且安全地将所有实体缓存在分布式缓存中,并在更新时通知dao层?我可能的想法是

  • 使用JPA2.1和Hibernate实现
  • 创建持久化数据库时
  • 持久化后,将其缓存到分布式缓存
  • 将所有读取操作运河化到缓存
  • 更新时通知dao层更新实体

是的,您可以设计一个

  • 添加时:将数据持久化到数据库并添加到缓存
  • 读取时:从缓存中读取数据,并将缓存未命中视为未命中 也存在于数据库中
  • 更新时:更新数据库中的数据,然后更新缓存中的数据(反之亦然) 反之亦然)
  • 删除时:从缓存中删除数据,然后从数据库中删除
如果只有一个应用程序使用该数据库,并且数据不是那么重要,那么这种方法就可以很好地工作。但是,如果数据完整性更为重要,则在这种方法中可能会遇到以下问题:

  • 当数据库(持久化)中存在数据时,可能会遇到缓存未命中 但尚未缓存)
  • 您可能会从缓存中获取过时数据(已在db中更新,但尚未更新) 在缓存中)
  • 另外,如果数据被其他应用程序从数据库中删除,则它将被删除
    仍将缓存在分布式缓存中(上的无效数据
    阅读)
如果您使用一个功能丰富的分布式缓存解决方案,如/提供了一个更好的方法。这样,您的应用程序将只需要对所有读取、写入或更新使用缓存,并且缓存将使用配置的提供程序保持数据库更新

另一种方法可能是使用分布式缓存作为hibernate的二级缓存,您无需自行添加缓存层。有关hibernate二级缓存的详细信息,请参阅

像Tayzgrid这样的分布式缓存解决方案提供了易于配置的功能。您还可以找到其他解决方案的hibernate提供程序