使用缓存的时候需要特别注意:防止缓存并发,并发量比较高的情况下,很可能出现多个请求同时查询1个key的情况,如果我们不加控 制,让这些请求全部穿透到数据库,容易导致数据库挂掉。正常的做法是:只放1个请求去数据库查询数据,其他请求等待(或者立即返回 null),查询数据库的那个线程返回结果后再将数据加入缓存中。
下面我们以ConcurrentMapCache
和GuavaCache
这2种实现,看下sync
的效果
使用ConcurrentMapCache作为缓存实现:
sync=false的输出结果: