二级缓存(@CacheNamespace)

Exisi 2021-03-27 07:42:01
Categories: Tags:
  • @CacheNamespace 注解主要用于 mybatis 二级缓存,等同于<cache>属性。默认情况下,MyBatis 没有开启二级缓存

 

  • @CacheNamespace 注解有以下属性:

属性

描述

implemetation

设置缓存的默认实现接口,默认是PerpetualCache.class

eviction

默认溢出淘汰策略,默认LruCache.class

flushInterval

缓存有效期,默认0 即用不失效

size

缓存容量

readWrite

支持缓存读写策略

当该属性被设置为true时,缓存命名空间将支持读写操作,缓存数据允许被更新;当该属性被设置为false时,缓存命名空间将只支持读操作,缓存数据无法被更新

blocking

设置是否阻塞。

 

当该属性被设置为 true 时,如果多个线程同时请求同一个缓存项,只有一个线程能够获取到锁并执行查询操作,其他线程会等待该线程查询完毕后再从缓存中获取数据。可以避免缓存穿透和雪崩问题。

 

当该属性被设置为 false 时,则不会启用阻塞模式,多个线程同时请求同一个缓存项时,每个线程都会去执行查询操作,并将结果放入缓存中。这种情况下可能会出现缓存穿透和雪崩问题。

properties

用于配置缓存的属性,可以通过该属性设置缓存的一些参数,例如缓存的大小、过期时间等。具体来说,properties 属性是一个数组,每个元素都是一个 Property 对象,用于表示一个缓存属性

示例

@CacheNamespace(implementation = MybatisRedisCache.class)

public interface UserMapper(){

}

示例

@CacheNamespace(

implementation = PerpetualCache.class,

flushInterval = 60000,

size = 1024,

readWrite = true,

blocking = false,

properties = {

@Property(name = "sizeLimit", value = "1000"),

@Property(name = "timeToIdleSeconds", value = "600"),

@Property(name = "timeToLiveSeconds", value = "1800")

}

)

public interface UserMapper(){

}

  • 当启用二级缓存的阻塞模式时,如果某个线程在获取锁后执行查询操作的时间过长,可能会导致其他线程等待时间过长或者超时。因此,在使用阻塞模式时需要根据实际情况合理设置等待时间和超时时间。

 

 

 

来自 < https://www.cnblogs.com/liuyingke/p/14863399.html>