将持久化的数据存放到内存副本中,用于提高并发,提高读取速度。
为什么用了缓存就能实现了
1.基于内存操作(内存读取快)
2.空间换时间(执行慢的程序可以通过消耗内存来优化,而消耗内存大的执行慢)
3.降低瓶颈操作(避免请求数据库的次数)
4.减少对外依赖()
问题:
公司使用的什么缓存?
缓存架构:
层级 | 常见产品 | 缓存解决方法缓存解决方法 | 缓存技术 |
---|---|---|---|
应用层 | 浏览器 | 浏览器缓存、本地缓存 | Http缓存协商、cookie、sqllite、websql |
网络层 | 网络路由 | CDN | Squid |
负载层 | Nginx、Apache | 动静分离、反向代理缓存 | 基于Http服务器 |
服务层 | Java、PHP | 动态页面静态化、应用缓存、分布式缓存、Mybatis缓存 | freemarker、velocity、thymeleaf、ehcache、guava、jodd、redis memcache mybatis一二级缓存 |
数据库 | Oracle、MySQL | 缓冲区 buffer pool |
本地缓存和分布式缓存的对比:
对比项 | 本地缓存本地缓存 | 分布式缓存 |
---|---|---|
概念 | 缓存和应用在同一个进程中,是基于JVM的缓存 | 单独的组件与应用分离 |
社区成熟 | 非常高 | 非常高 |
性能 | 很高 单机 | 高 需要TCP协议交互 |
黏度 | 紧耦合 | 松耦合 |
使用环境 | 单机 | 单机/集群环境 |
高可用 | 与应用同生共死 | 集群抱团死一个还有千万个 |
应用共享 | 不能共享 | 可共 |
对比项 | guava | caffeine | ehcache |
---|---|---|---|
是否开源 | Y(Google) | Y(Apache) | Y(Terracotta) |
级别 | 轻量级 | 轻量级 | 重量级 |
知名度 | Java开发者必备 | Spring5 | Hibernate |
缓存算法 | LRU | W-TinyLFU | LRU、LFU、FIFO |
JDK版本 | =1.6 | =1.8 | =1.5 |
持久化支持 | 不支持 | 不支持 | 支持(收费) |
集群解决方案 | 无 | 无 | 有(商业) |
Spring Cache支持 | 不支持 | 支持 | 支持 |
性能监控 | 无 | 无 | 提供(jmx,页面) |
分布式应用缓存:
扫描二维码关注公众号,回复:
1840181 查看本文章
对比项 | Redis | memcached |
---|---|---|
性能 | 很高很高TPS QPS 10W | 很高很高TPS QPS 10W |
数据类型 | K/V list set map | K/V |
内存限制 | 突破物理内存 | 不能超过可用内存 |
高可用(集群) | 支持 | 支持 |
可靠性(持久性) | 支持AOF、快照 | 无 |
事务支持 | 支持 | 用cas保证一致性(锁) |
缓存策略 | LRU、FIFO | LRU |
Spring Cache支持 | 支持 | 支持 |
性能监控 | 无 | 无 |