/**
* Spring-Cache的不足:
* 1)读模式:
* 缓存穿透:查询一个null的数据;====》解决:缓存空数据:spring.cache.redis.cache-null-values=true
* 缓存击穿:大量并发进来同时查询一个正好过期的数据;====》解决:加锁;SpringCache默认是无锁的(sync=true加锁)@Cacheable(value = {"catagory"}, key = "'OneLevelCategory'", sync = true) 加的是本地锁,也足够了
* 缓存雪崩:大量的key同时过期。====》解决:加随机时间(容易弄巧成拙,本来恰好过期时间不一样,加上随机时间后一样了)
* 加上过期时间:spring.cache.redis.time-to-live=3600000(放入缓存时间不一样,过期时间也就不可能都一样)
* 2)写模式:(缓存与数据库一致)
* 1>、读写加锁
* 2>、引入Canal,感知到Mysqk的更新去更新数据库
* 3>、读多写少,直接去数据库查询就行
*
* 总结:
* 常规数据(读多写少,及时性一致性要求不高的数据),完全可以使用Spring-Cache;写模式(只要缓存的数据加上过期时间就够了)
* 特殊数据:特殊设计
*
*
*/
标签:缓存,SpringCache,过期,cache,---,加锁,79
From: https://www.cnblogs.com/morehair/p/17091436.html