val自增
比如说想要实现点赞功能,用户点击一次,调用redisTemplate.opsForValue().increment(key, delta);
方法即可
redis 主从哨兵
- 从redis配置
1 | port 6002 |
redis容易出现的问题
缓存穿透
数据库和缓存中都没有该数据,有人恶意请求的话,所有的请求都会到达数据库导致数据库崩溃。- 布隆过滤器
- 增加接口的安全性,比如添加校验
- 当缓存取不到数据时,也将key写入缓存,val为null,有效期设置短些,比如30s
缓存击穿
数据库有数据缓存中没有该数据,因为缓存有过期时间,如果过期的一瞬间突然涌入大量的相同请求,那么这些请求因为从缓存中无法获取值而转向数据库,导致数据库并发量突然增大而奔溃- 比如一些热点的数据设置为不过期
- 加上互斥锁,当缓存不存在时,加锁去从数据库中获取内容放到缓存中
- 缓存雪崩
数据库有数据缓存中没有该数据,缓存中大批量的数据到过期时间,那一瞬间查询量巨大的情况下,数据库可能会宕机- redis集群、哨兵
- 过期时间随机设置
- 热点数据永不过期