1)Redis本身就是在内存中进行存储数据的,那么为什么不直接定义一个变量来针对数据直接进行存储呢?因为Redis主要是应用于分布式系统,才能发挥它的最大威力,如果只是一个单机程序,通过变量存储数据的方式,是比Redis有着更好的选择
2)因为自己主机定义的变量只能在自己的主机上进行使用,自己的主机有着自己的进程,其他的主机是处于别的进程上面的,如果别的主机也就是别的进程想要进行访问其他主机上的数据只能就通过进程间通信,Redis就是基于网络,可以把自己内存中的变量交给别的进程,甚至别的主机上的进程使用,从而让任何一个应用程序能够访问到redis中的变量,从而使数据在分布式系统中可以达到共享使用的效果;
3)和MYSQL相比,更大的劣势就是存储空间特别慢,大多数的互联网产品,都是存在着2 8原则的,20%的热点数据能满足80%的访问需求,增加redis会使系统的复杂程度大大提升,而且如果数据发生修改,还涉及到redis和MYSQL的数据同步问题;
说一下什么是Redis?
使用IO多路复用减少等待Socket轮询等待的时间
Redis的应用场景:
1)实时存储:把Redis当成了数据库,大多数考虑到数据存储,优先考虑的是大,但是仍然有一些场景,考虑的是快,搜索引擎也就是广告搜索(商业搜索),他对于性能的要求是非常高的,所以在实际情况下并没有使用到MYSQL这样的数据库,而是把所有需要进行检索的数据都存放到了内存里面,就是使用类似于Redis这样的内存数据库来完成的,但是像这样的内存数据库,需要进行存储大量的数据,是需要不少的硬件资源的,所以只能靠充值了
如果将redis当成数据库,那么Redis中存放的是全量数据,这里面的数据是不可以随便丢的
2.1)用作于缓存或者是存储session:使用MYSQL存数据太慢,根据二八原则,将热点数据存储在redis中,Redis中存放的是部分数据,全量数据都是依靠MYSQL来进行存储的,哪怕Redis的数据没了,还可以从MYSQL这边加载回来
2.2)介绍一下SessionStorage:
Cookie:主要是用来实现用户信息的保存,是需要Session来进行配合的,Session是存储在应用服务器上面的,在Session里面服务器才真正的保存了用户数据,而Cookie里面只是进行存储了用户的唯一身份标识,SessionID只是浏览器在这边存储了用户的一个唯一身份标识
那么如何解决上述问题呢?
1)想办法让负载均衡器,把办法把同一个用户的请求始终打到同一个机器上面,不是通过轮询的方式而是通过分配userID这样的方式来分配机器;
2)把会话信息单独的拎出来,放到一组独立的机器上面进行存储,况且如果说机器发生了重启,那么保存在内存中的Session会话信息也并不会丢失
3)消息队列:充当服务器,基于这个消息队列,可以实现一个网络版本的生产者消费者模型
在分布式系统中,服务器和服务器之间,有时候也是需要使用到生产者消费者模型的,它的优势就是解耦合,肖锋填谷
redis是不适合的场景:不适合存储大规模数据
redis服务器本体负责存储和管理数据
Redis的客户端和服务器可以在同一台主机上,也可以在不同的主机上,但是实际上redis服务器不光给一个客户端提供服务,还有可能给很多个客户端提供服务
1)在单机环境下,还是需要使用HashMap来直接操作内存,而使用Redis是先通过网络进行通信,然后再来操作内存网络传输的速度是远远小于直接操作内存的速度的,现在即使是万兆网卡,虽然已经达到了操作磁盘的速度但是相比于操作内存的速度来说还是要慢上很多的
2)那么在实际的开发场景中,是否要使用到redis呢?还是要结合具体的需求来进行确定,引入redis的缺点,会使系统变得更慢,但是有了redis之后,就可以把数据单独来进行存储,后续涉及到应用服务器重启的时候,是不会影响到数据的内容的,况且如果未来要扩展到分布式系统使用redis也是最佳的,所以我们在引入一个技术的时候,一定要想清楚来龙去脉,想清楚能够解决什么问题,引入了什么问题