spring hibernate cache

what

其实你就可以想象成一个 Map ,通过 key 在缓存里面找 value 。类似于session这种东西

来一个比较官方的解释

缓存是数据库数据临时容器,它包含了库表数据的临时拷贝,位于数据库与数据访问层之间。ORM进行数据读取时,会根据其缓存管理策略,首先在内存中查询,如果在内存中发现所需数据(缓存命中),则直接以此数据错位查询结果加以利用,从而避免了数据库调用的性能开销。

why

EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力;

how

我是在spring boot框架下的配置

在application.properties配置中打开二级缓存
spring.jpa.properties.hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory
spring.jpa.properties.net.sf.ehcache.configurationResourceName = config/cache/ehcache.hibernate.xml
spring.jpa.properties.javax.persistence.sharedCache.mode = ENABLE_SELECTIVE
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.use_query_cache=true
在实体类中添加缓存注解
@Des("所属组织")
@ManyToOne
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
private Org org;
在config下面的cache中配置ehcache.hibernate.xml


    
    
    

缓存策略详解
  • 1),Read-only
    只读。对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。
  • 2),Nonstrict-read-write
    非严格读写。如果程序对并发访问下的数据同步要求不是非常严格,且数据更新操作频 率较低(几个小时以上),可以采用这种并发访问策略,获得较好的性能。
  • 3),Read-write
    严格读写。提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。
  • 4),Transactional
    事务。仅仅在托管环境中适用。它提供了Repeatable Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。

如果有啥问题,大家一起探讨探讨!

参考资料1

参考资料2

参考资料3

你可能感兴趣的:(spring hibernate cache)