💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
缓存穿透和上面两种现象的本质区别就是:这时候访问的数据不但在`Redis`中不存在,而且在数据库中也不存在,这样如果并发过大就会造成数据源源不断的到达数据库,给数据库造成极大压力。 #### 解决方案 对于缓存穿透问题,加锁并不能起到很好地效果,因为本身`key`就是不存在,所以即使控制了线程的访问数,但是请求还是会源源不断的到达数据库。 解决缓存穿透问题一般可以采用以下方案配合使用: * 接口层进行校验,发现非法的`key`直接返回。比如数据库中采用的是自增`id`,那么如果来了一个非整型的`id`或者负数`id`可以直接返回,或者说如果采用的是`32`位`uuid`,那么发现`id`长度不等于`32`位也可以直接返回。 * 将不存在的数据也进行缓存,可以直接缓存一个空或者其它约定好的无效`value`。采用这种方案最好将`key`设置一个短期失效时间,否则大量不存在的`key`被存储到`Redis`中,也会占用大量内存。