小弟不才,在了解完缓存的一些知识后对缓存的使用问题产生了一些疑问,该如何合理的使用缓存?
我现在知道的缓存有:数据库查询缓存(如Mysql查询缓存) - ORM框架缓存(如Hibernate的查询缓存/一二级缓存) - 服务器缓存(如memcached/redis) - HTTP缓存加速器或者服务器(如varnish/nginx)等。
他们都是一级一级下去的,各自都能理解,但是关于结合使用的问题还是有些不是很清楚。
1、数据库查询缓存和ORM框架缓存之间查找顺序是:ORM查询缓存 - 数据库查询缓存 - 数据库实体表吧?那么对于单应用服务/单数据库服务这两个查询缓存是不是有点冗余。
2、ORM的二级缓存有没有必要使用服务器缓存,我感觉本地缓存(ehcache)就够了,去memcached(远程)去拿一来可能没有本地快,二来感觉memcached之类的还是老老实实存些字典项权限啊什么之类的信息。(这点真是恕我愚见。)
3、各位平时的缓存策略是怎么样的?(这个才是重点。)
上述理解大言不惭如有偏颇请谅解~
基本多读少写的场景下为了提高响应必然需要缓存,而每层缓存只解决该层的响应问题,不能因为其他层有缓存就觉得变成冗余了。毕竟请求从应用层往数据层走的过程中,业务逻辑实际上是在逐步细化的,每个缓存对应的逻辑单元大小都不同,所以每层缓存解决的响应问题层面也不同。
而至于orm的二级缓存问题,我的看法是和你的业务逻辑与服务器部署有关,如果是单机前端服务器,而且服务器配置够好不会和业务逻辑争抢系统资源的话,使用本地缓存也可以。但是如果多机的话,还是得使用服务器缓存,毕竟缓存数据更新时需要在整个业务环境中更新,而本地缓存只能更新目前响应的这台服务器的缓存,其他服务器的本地缓存不更新的话会造成数据不一致和脏数据。
缓存策略就是多读少写且请求量大的数据都得加缓存!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。