1. 缓存的使用场景
1.1 数据库缓存,减轻数据库服务器压力
一般情况下数据存在数据库中,应用程序直接操作数据库。
当访问量上万,数据库压力增大,可以采取的方案有:
- 读写分离,分库分表
- 当访问量达到10万、百万,需要引入缓存。
将已经访问过的内容或数据存储起来,当再次访问时先找缓存,缓存命中返回数据。
不命中再找数据库,并回填缓存。
1.2 提高系统响应
数据库的数据是存在文件里,也就是硬盘。与内存做交换(swap)
在大量瞬间访问时(高并发)MySQL
单机会因为频繁 IO
而造成无法响应。MySQL
的InnoDB
是有行锁(更新)
将数据缓存在 Redis
中,也就是存在了内存中。内存天然支持高并发访问。可以瞬间处理大量请求。 QPS
到达 11万/S
读请求,8万/S
些请求
1.3 做Session分离
传统的 session
是由 tomcat
自己进行维护和管理。集群或分布式环境,不同的 tomcat
管理各自的 session
。只能在各个 tomcat
之间,通过网络和 IO
进行 session
的复制,极大的影响了系统的性能。
- 各个
Tomcat
间复制session
,性能损耗 - 不能保证各个
Tomcat
的Session
数据同步
将登录成功后的Session
信息,存放在Redis
中,这样多个服务器(Tomcat
)可以共享Session
信息。Redis
的作用是数据的临时存储
1.4 做分布式锁(Redis)
一般讲锁是多线程的锁,是在一个进程中的,多个进程(JVM
)在并发时也会产生问题,也要控制时序性,可以采用分布式锁。使用 Redis
实现 setNX
(命令在指定的 key
不存在时,为 key
设置指定的值)
命令:SETNX KEY_NAME VALUE
1.5 做乐观锁(Redis)
同步锁和数据库中的行锁、表锁都是悲观锁,悲观锁的性能是比较低的,响应性比较差;高性能、高响应(秒杀)采用乐观锁,Redis
可以实现乐观锁 watch + incr
2. 什么是缓存
缓存原指 CPU
上的一种高速存储器,它先于内存与 CPU
交换数据,速度很快;现在泛指存储在计算机上的原始数据的复制集,便于快速访问。
在互联网技术中,缓存是系统快速响应的关键技术之一;以空间换时间的一种技术(艺术)
3. 大型网站中缓存的使用
单机架构LAMP(Linux+apache+MySQL+PHP)、JavaEE(SSM)
,访问量越大,响应力越差,用户体验越差
引入缓存、示意图如下:
在大型网站中从浏览器到网络,再到应用服务器,再到数据库,通过在各个层面应用缓存技术,大大提升了系统性能和用户体验。