1、缓存穿透

        问题描述:

                       缓存命中率降低,客户端请求大量缓存中不存在的key,导致请求直接访问数据

                        库,数据库压力瞬增

        解决方案:

                        1.将key的value设置为null,并设置较短过期时间。

                        2.设置白名单:使用bitmaps类型

                        3.布隆过滤器

                        4.设置黑名单

2、缓存击穿

        问题描述:

                       缓存中热点key突然过期,导致过多请求直接访问数据库,数据库压力瞬增

        解决方案:

                        1.提前设置key的过期时间,确定其不会在频繁访问时突然过期

                        2.热点key过期后加上锁,只有缓存中重新加入该key才会打开锁

                        3.实时监控,发现热点key过期后,及时重新加入

3、缓存雪崩

        问题描述:

                       在极小时间段内,缓存中大量key突然过期,导致过多请求直接访问数据库,数据

                        库压力瞬增

        解决方案:

                        1.设置多级缓存,nginx缓存+redis缓存,在一个缓存中key大量过期后先访问

                        别的缓存。

                        2.为缓存中的key设置过期标识,在key快要过期时,及时更新过期时间。

                        3.key过期后加上锁,只有缓存中重新加入该key才会打开锁

                        4.将缓存的过期时间错开

4、分布式锁

        在分布式集群系统中,需要用分布式锁来跨越各个系统控制共享资源

        redis分布式锁:

                1.上锁

                2.具体操作

                3.释放锁:

                        (1)、比较uuid,一样才可以释放,否则可能会释放错

                         (2)、锁到了过期时间,自动释放

                4.删除操作(lua脚本保证原子性)

Logo

更多推荐