- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE1
PAGE1
缓存机制概览
1缓存的基本原理
缓存是一种用于提高数据访问速度和系统性能的技术,它通过存储数据的副本,使得数据可以被快速访问,而无需每次都从原始数据源获取。缓存的基本原理在于利用时间局部性和空间局部性,即最近被访问的数据很可能在不久的将来再次被访问(时间局部性),以及数据访问往往集中在某个区域(空间局部性)。
1.1时间局部性示例
假设我们有一个应用程序,频繁访问数据库中的用户信息。每次访问数据库都需要花费一定的时间,如果我们将最近访问过的用户信息存储在缓存中,那么下一次访问相同用户信息时,就可以直接从缓存中读取,而无需再次查询数据库,从而大大提高了访问速度。
1.2空间局部性示例
在文件系统中,如果一个文件被频繁访问,那么这个文件及其附近的文件也很可能被访问。通过将这些文件的副本存储在缓存中,可以减少磁盘I/O操作,提高文件访问速度。
2缓存的类型与选择
缓存的类型多种多样,根据不同的应用场景和需求,可以选择不同的缓存类型。常见的缓存类型包括:
本地缓存:存储在应用程序本地的缓存,如使用Java的ConcurrentHashMap或GuavaCache。本地缓存访问速度最快,但存储空间有限。
分布式缓存:在多台服务器之间共享的缓存,如Redis、Memcached。分布式缓存可以提供更大的存储空间和更好的容错性,但访问速度略慢于本地缓存。
数据库缓存:数据库系统内部的缓存,如MySQL的查询缓存。数据库缓存可以减少对磁盘的访问,提高查询速度。
2.1本地缓存示例:GuavaCache
importmon.cache.CacheBuilder;
importmon.cache.Cache;
importmon.cache.LoadingCache;
importjava.util.concurrent.ExecutionException;
importjava.util.concurrent.TimeUnit;
publicclassGuavaCacheExample{
privatefinalLoadingCacheString,Stringcache;
publicGuavaCacheExample(){
cache=CacheBuilder.newBuilder()
.maximumSize(100)//设置缓存的最大容量
.expireAfterWrite(10,TimeUnit.MINUTES)//设置缓存项在写入后10分钟过期
.build(this::loadFromDatabase);//设置缓存加载函数
}
privateStringloadFromDatabase(Stringkey)throwsExecutionException{
//模拟从数据库加载数据
returnDatafor+key;
}
publicStringgetData(Stringkey)throwsExecutionException{
returncache.get(key);
}
publicstaticvoidmain(String[]args)throwsExecutionException{
GuavaCacheExampleexample=newGuavaCacheExample();
System.out.println(example.getData(User1));//第一次访问,从数据库加载数据
System.out.println(example.getData(User1));//第二次访问,从缓存中读取数据
}
}
在这个示例中,我们使用Guava库中的CacheBuilder来构建一个本地缓存。maximumSize方法用于设置缓存的最大容量,expireAfterWrite方法用于设置缓存项在写入后多久过期。build方法接受一个函数,当缓存中没有对应键的数据时,会调用这个函数从数据库加载数据。
2.2分布式缓存示例:Redis
importredis
#连接Redis服务器
r=redis.Redis(host=localhost,port=6379,db=0)
#设置缓存
r.set(user1,Dataforuser
您可能关注的文档
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP成本管理与优化.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP合规性与法规遵循.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:机器学习与人工智能.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:计算与存储.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:监控与日志.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:开发者工具与资源.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:身份与访问管理.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:数据库与数据仓库.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:网络与安全.docx
- 全栈工程师-DevOps与云计算-Google Cloud Platform (GCP)_GCP核心服务:物联网与边缘计算.docx
- super-mega-oct-o-score-ticket-redemption-game-service-用户维护说明书手册-five-star.pdf
- power-putt-2013-video-golf-arcade-game-operators-service-用户维护说明书手册-its.pdf
- The-Beatles-Diamond-Edition-Pinball-Machine-Service-用户维护说明书手册-Stern-Pinball.pdf
- Star-Wars-Pro-Pinball-Machine-Service-用户维护说明书手册-Stern-Pinball.pdf
- the-grabber-money-machine-cash-cube-service-用户维护说明书手册-fun-industries.pdf
- super-bikes-2-video-arcade-game-用户维护说明书手册-rawthrills.pdf
- sink-it-shootout-ticket-redemption-arcade-game-service-用户维护说明书手册-baytek.pdf
- The-Walking-Dead-Video-Arcade-Game-Service-用户维护说明书手册-Raw-Thrills.pdf
- prize-hub-modular-ticket-redemption-center-service-用户维护说明书手册-baytek.pdf
- sharp-shooter-video-arcade-game-service-用户维护说明书手册-coastal-amusements.pdf
文档评论(0)