缓存:缓存是一个高速数据交换的存储器,使用它可以迅速的访问和操作数据
因为单体应用已经不适用于现在的环境了,所以最终变成分布式系统,本地缓存已经不适用了
1)比如说张三用户访问了应用程序nginx把请求分配给A服务器
A机器查询数据库,并且把数据库的结果放到缓存中了
2)这时张三再去访问此服务,nginx把这个张三发送过来的请求分配给B服务器了,这时B服务器之前没有过缓存,这时候B服务器还需要再次查询数据库,还需要再把数据库访问的结果放到缓存里面,因为它是本地缓存,他只是对本机缓存有效果,下次张三不去访问这台机器了,那你说缓存还有什么效果呢?因为用户的每一次访问都会被分配到不同的服务器里面
3)缓存的更新问题:假设在分布式服务中有100台机器,张三经过一段时间的时候,这100台服务器都已经保存了本地缓存了,比如说保存了某一次查询的结果,比如说select * from user where userID=1,也就是说本地缓存有100份,100个机器都进行缓存了,假设此时李四把userID=1的用户信息给修改了,李四是在100台服务器上面的某一台机器进行修改的,进行数据的更新,同时也把这一台服务器上面的本地缓存给更新了,但是每一台服务器都有自己的缓存,但是有其他99台服务器的缓存没有进行更新,都是保存在本地的,都是不知道的,其他本地缓存不可知,导致后续访问错误,由此可知本地缓存在分布式场景下已经不适用的,不可感知+不可变更,本地缓存查询和更新都有问题;
4)用户量比较少是可以进行单体应用的,当用户比较多,就必须使用分布式应用了,本地应用是每一台服务器都有着自己本地的缓存,所以我们会把redis部署到一个单独的服务器上面,这台服务器是为所有的应用服务器去服务的;
5)此时所有的应用服务器都是访问同一台redis服务器,这个时候就不会存在说本地缓存中,所有缓存只是保存在一台redis服务器,当服务器访问数据库时,先去查看一下redis服务器里面有没有缓存,如果有直接返回;
6)所以说我们需要将session信息保存在redis缓存中,如果session在每一台机器中缓存,没有分布式缓存,就会意味着一个用户对一个请求,需要登陆多次...
假设小明针对服务进行访问,nginx把请求分发给服务器1,小明进行登录,服务器1保存session信息,但是小明下一次访问服务,nginx把请求分发给服务器2,但是服务器2没有session信息,所以说小明只能重新进行登录,如果有100台服务器,nginx轮询分发服务器,小明难道需要登录100次吗?
快照方式是将某一个时刻整体的内存中的数据全部写到磁盘里面,假设10min之前,我已经拍了一个快照,把内存中的数据成功的写到了磁盘里面,但是再10min之后