Java小白 多级缓存

首先使用缓存,肯定是为了效率,而我们遵从的原则就是离用户最近的节点进行缓存,但是考虑到不同的业务需求,就衍生出了多种缓存方式。
一、直接从mysql中读取
这个自然是最基本的操作方式了,在相应的mapper中声明对应的查询方法,通过sql,获取对应的数据库dao原型,供前端展示。
二、redis缓存
利用redis缓存,通过关键的key查询,如果没有查到,去mysql查找,查到后,通过key保存到对应的redis中,下一次就可以直接从redis读取
三、应用服务器本地热点数据缓存
从独立的mysql和redis服务器读取数据,始终会牵扯到网络传输的read和write,效率肯定是没有本地缓存高,所以业务允许的情况下,可以考虑将一些热点数据存储到本地内存,使用google的开源框架 guava,进行cache。
Java小白 多级缓存
Java小白 多级缓存
Java小白 多级缓存
四、nginx代理服务器文件缓存 proxy cache
遵循将缓存放置在离用户最近的节点,我们又考虑到直接从用户访问的源头,进行缓存操作,使用nginx.conf,配置对应的proxy,进行本地的请求缓存,得到对应的缓存文件,还是一样的套路,在nginx中的tmp_cache目录中查看是否有缓存,有直接使用,没有就将请求扔给反向代理的服务器,继续执行我们上述过程中的操作,最主要的目的还是为了减少网络传输过程中的消耗。
五、nginx lua脚本语言 shared dic 共享缓存
这里就不再说lua多么多么好了,一时半会儿,作为小白的我也说不清楚,通过shared dic共享内存字典,nginx的所有worker进程可见,采用lru淘汰算法,就类似与业务服务器的热点数据缓存一样,将nginx服务器通过lua语言,也进行一次热点数据缓存,提高效率。
六、openresty lua 直接访问redis读取缓存
这个是通过openresty lua支持redis的使用,直接通过接口调用,在nginx服务器,直接通过key去redis查询是否有缓存,省略了再到业务服务器,redis读取,但是上述的 四、五还有这一步的方法全部将压力给到了nginx服务器,这个还是要在具体的业务场景进行合适自己的选择。