redis 优化

redis如果做缓存来用,就是存一些热点数据,防止大量并发直接访问数据库,导致数据库压力过大,但是像大型网站,不可能把所有数据都存入redis,这就要做到redis储存数据的冷热分离,简单的做法就是给缓存的key加一个过期时间,如果get数据的时候给这个key设置续期,最终更加用户的操作来做到数据的冷热分离。

缓存击穿和缓存雪崩,是统一时间大量缓存失效,或者redis宕机,总之有一点就是大量数据直接访问数据库,优化的措施就是缓存的过期时间随机生产,防止同一时间过期。

缓存穿透就是查询绕过了redis,同时查询数据库也没有这条记录,优化的措施是即使数据库没有,也在redis设置一个空置,但是要设置一个过期时间,防止过多的空值key,还有一个使用布隆过滤器,来判断数据库是否有这个记录,没有直接返回。

单个redis热点数据,高并发下,可以用重建缓存的方式解决大量数据访问数据库,用DCL方法,双重判断的做法,如果缓存查不到,加锁,只有一个线程去访问,去重建缓存,其他线程接下来访问的都是缓存中的数据。

如果redis缓存也不能承受大的并发量,可以用多级缓存的方法,在jvm内存中设置缓存解决。

redis双写不一致情况可以用延时双删的办法也可以用分布式加锁的方法避免,一般不是在高并发场景,不用特殊处理,或者在高并发场景下,不要就绝对的一致性要求,都可以设置key的超时时间来保证最终一致性,减少系统的复杂性,延时双删不推荐,降低redis的效率,分布式锁方案可以用读写锁机制来提高性能,缓存的使用场景一般是读多写少情况下,写多的情况下可以直接读数据库,没有必要用缓存

redis 分布式锁优化:

根据场景优化:

比如秒杀扣库存,可以用分段锁

比如双写不一致,可以用读写锁

你可能感兴趣的:(redis,java)