1:Redis的主从问题
主从复制:就是把写入到主服务器上的数据自动的同步给从服务器
主从复制 最终解决的问题 就是读写分离
读写分离:就是将读放到从服务器上,写放到主服务器上
主从复制的时候 主服务器 能完成写,也能完成读的操作 读的时候是自动的路由到了从服务器 ;从服务器只能完成 读的操作
2:Redis的哨兵模式
在主从复制中,即使你解决了读的压力,上面的网络架构任然可能存在一个问题,就是主服务器宕机了,整个集群就瘫痪了,这个问题就成为集群的单点问题。
哨兵:站岗的 它监控的是主服务器的生死问题,如果监听到主服务器挂掉了,那么哨兵就会开始投票,如果投票的数量满足了我们我们预先设定的规则,那么就会自动选择一个从服务器作为新的主服务器,这个时候,整个集群也不至于崩溃。
3:Redis的集群模式
集群模式:就是多个主服务器,多个从服务器,要搭建redis集群至少需要6个物理机。
不论是主从还是哨兵,写的主服务器只有一个,毕竟一个服务器能够储存的资源是有限的,随着用户量的不断增加,这个时候可能主服务器不能够满足的们的要求,也需要拓容和减压,于是就产生Redis集群。
横向拓容,纵向减压
每一横排机器数据之和才是才是原来的所有的数据,也就是说每一台机器的数据是不一样的
每一个纵向上是一个主从关系,遵循主从复制。每个纵向上机器的数据是一致的
规划:使用一台服务器 开启 6个端口 最终将六台服务器的数据 放到自己的文件夹中
4:SpringBoot整合Redis
1:导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2:编写配置文件
#Redis
#spring.redis.host=127.0.0.1
spring.redis.host=10.7.151.82
##Redis服务器连接端口
spring.redis.port=6379
##连接超时时间(毫秒)
spring.redis.timeout=10000
##Redis服务器连接密码(默认为空)
#spring.redis.password=123456
##连接池中的最大连接数
spring.redis.pool.max-active=10
##连接池中的最大空闲连接
spring.redis.pool.max-idle=10
spring.redis.pool.min-idle=0
##连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#给当前的服务取名字
spring.application.name=qf-shopping-redis
3:编写manager
@Component
public class RedisManager {
@Autowired
private StringRedisTemplate stringRedisTemplate=null;
public void write(String key,String value){
stringRedisTemplate.opsForValue().set(key,value);
}
public void delete(String key){
stringRedisTemplate.delete(key);
}
public Object read(String key){
return stringRedisTemplate.opsForValue().get(key);
}
}
5:项目中的缓存逻辑以及Redis的使用
5:什么是缓存预热?
缓存预热:简单的说就是你的缓存服务一旦开始 那么立马就将要缓存的数据 全部放到Redis中去
5.1:项目中哪些地方需要缓存
1:产品的分类
2:广告
3:优秀商家
4:公告
5:质量技术标准参数
缓存的时候key是什么 value是什么
Key:是自定义的 但是一般不用明文 MD5(“goodType”) 值是:从数据库查询出来的这个对象的JSON格式
5.2:缓存的数据格式是怎样的
都是JSON格式(方便转换)
5.3:前端页面请求数据的时候 缓存的逻辑是怎么样的
1:前端打开页面------发送请求
1.1:查询redis是否存在 存在(直接返回)(缓存的穿透)
不存在
查询数据库
不存在(将这个查询出来的值设置成”” 存储到Redis中去)
存在(存储到Redis 并返回数据)(数据库减压 == 加分布式锁)
5.4:缓存存在的问题
缓存穿透
缓存的雪崩(多个KEY 同时过期)
5.5:缓存的强一致性如何实现(TCC 先尝试然后在修改)
后台更改数据之前 首先让这个数据过期 再更改数据
5.6:缓存的最终一致性的实现
开启定时任务----每隔一段时间 就查询(MySQL)中需要缓存的内容 、然后覆盖Redis中的缓存内容