怎样查询网站是否备案,网站怎么做背景不变页面滑动,静态网站开发外文文献,好的设计作品网站redis缓存问题
缓存击穿
缓存击穿是指热点key在某个时间点过期的时候#xff0c;而恰好在这个时间点对这个Key有大量的并发请求过来#xff0c;从而大量的请求打到db
解决方案#xff1a;
利用互斥锁#xff0c;缓存中没有#xff0c;先获取锁#xff0c;再去请求数据…redis缓存问题
缓存击穿
缓存击穿是指热点key在某个时间点过期的时候而恰好在这个时间点对这个Key有大量的并发请求过来从而大量的请求打到db
解决方案
利用互斥锁缓存中没有先获取锁再去请求数据库写入缓存这样后面的数据就可以从缓存中拿到数据了不对该数据设置过期时间而是由专门的定时任务从数据库进行读取来更新缓存数据 缓存穿透
请求缓存和数据库中不存在的数据导致每次请求都到数据库中去查询导致数据库压力过大
解决方案 如果数据库不存在也设置一个默认值放入缓存这样第二次到缓存中获取就有值了不会继续访问数据库可以把缓存时间设置的短一些 (适用场景数据命中不高数据频繁变化实时性高) 利用互斥锁缓存中没有先获取锁再去请求数据库没有获取到锁的先等待在进行重试 利用布隆过滤器类似于一种哈希表用所有可能的值生成一个bitmap内部维护一系列合法有效的key进行拦截如果不合法直接返回guava中有实现BloomFilter (适用场景数据命中不高数据相对固定实时性低)
缓存雪崩
缓存同一时间大量失效或者由于某些原因缓存不能提供服务导致大量请求直接访问数据库从而导致数据库压力倍增造成数据库也宕机
与击穿的区别雪崩是很多key过期击穿是某个热点key
解决方案
在设置缓存时间时加上一个随机值避免集体失效[无法解决热点数据问题(同一时刻访问同一条数据)]只让一个线程构建缓存其他线程等待构建缓存的线程执行完重新从缓存中获取数据保证了每个时刻只有一个线程在执行请求但是会导致很多线程在等待一个线程降低了系统的qps双缓存缓存1中设置过期时间缓存2中在启动时加载进行缓存预热先访问缓存1如果有值则返回缓存1没有值则访问缓存2返回数据并启动异步更新线程来同时更新缓存1和缓存2的数据如果value特别大的话会占用很多内存内存利用率低缓存不存在后查询数据库操作可以进行限流防止大量请求直接访问数据库
还需要预防缓存宕机
保证缓存服务高可用进行限流并降级
缓存一致问题
如何保证缓存与数据库一致呢先删除缓存然后加锁获取数据
读的时候先读缓存在读数据库数据库取出数据后放入缓存更新的时候先更新数据库再删除缓存 https://zhhll.icu/2021/数据库/非关系型数据库/redis/基础/11.redis缓存问题/ 本文由mdnice多平台发布
61469895-7e4f-4491-8ba5-b63939b30b10