缓存微信接口凭据access_token:初步认识ServletContext
2017-09-12 15:32
323 查看
本人一直从事微信公众号的开发,最近遇到这么一个问题:在调用微信的各个接口的时候,需要在调用接口的时刻向微信服务器传送acces_token参数,access_token是微信公众号接口的调用凭据,access_token本身也是通过调用微信的接口得到的,但access_token的获取频率是有限制的,每天只能获取2000次,每次有效时间为120分钟,在微信开发者文档上说明如下:
那么,我们就需要将access_token缓存下来。若要将access_token缓存下来,以供全局使用,本人一下想到的是两个方法:1.使用redis、memcached等第三方工具缓存。2.使用application缓存。先说说第一种方法,第一种方法是使用第三方插件实现的,如果项目中已经搭好了插件,直接使用即可,但由于我这个项目在时间上有压力,而且更重要的一点是,我的项目先前并未使用任何缓存插件,缓存都是session级别的,而且除了access_token,没有别的全局变量,所以如果仅仅为了access_token而搭建整个缓存插件,从时间上、项目的轻量性上显得特别的不划算,所以我把目光转移到了application上了。现在来详细说说application。首先贴出代码:
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
从以上代码看出,application是从ServletContext实例化而来,那么我们就需要了解一下ServletContext的特性。首先看看ServletContet的API文档:
ServletContext是一个全局的储存信息的空间,这意味着它在整个应用中是共享的,它的生命周期存在于服务器启动直至服务器关闭,项目运行期间,也就是它的生命周期期间。
从以上的分析可以得知,ServletContext满足这次我缓存access_token的需求,所以这次就决定用它了!
首先是实例化ServletContext:
然后调用微信的接口,获取access_token,在得到access_token之后,只需要调用ServletContext的setAttribute方法缓存access_token:
需要取出access_token的时候,只需调用ServletContext的getAttribute方法即可,就像调用session的方法一样,是不是很方便?
小项目在不适用redis、memcached等工具的情况下,ServletContext是一个不错的用于缓存全局变量的选择!
那么,我们就需要将access_token缓存下来。若要将access_token缓存下来,以供全局使用,本人一下想到的是两个方法:1.使用redis、memcached等第三方工具缓存。2.使用application缓存。先说说第一种方法,第一种方法是使用第三方插件实现的,如果项目中已经搭好了插件,直接使用即可,但由于我这个项目在时间上有压力,而且更重要的一点是,我的项目先前并未使用任何缓存插件,缓存都是session级别的,而且除了access_token,没有别的全局变量,所以如果仅仅为了access_token而搭建整个缓存插件,从时间上、项目的轻量性上显得特别的不划算,所以我把目光转移到了application上了。现在来详细说说application。首先贴出代码:
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext application = webApplicationContext.getServletContext();
从以上代码看出,application是从ServletContext实例化而来,那么我们就需要了解一下ServletContext的特性。首先看看ServletContet的API文档:
ServletContext是一个全局的储存信息的空间,这意味着它在整个应用中是共享的,它的生命周期存在于服务器启动直至服务器关闭,项目运行期间,也就是它的生命周期期间。
从以上的分析可以得知,ServletContext满足这次我缓存access_token的需求,所以这次就决定用它了!
首先是实例化ServletContext:
WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext(); ServletContext application = webApplicationContext.getServletContext();
然后调用微信的接口,获取access_token,在得到access_token之后,只需要调用ServletContext的setAttribute方法缓存access_token:
application.setAttribute("accessToken", accessToken);
需要取出access_token的时候,只需调用ServletContext的getAttribute方法即可,就像调用session的方法一样,是不是很方便?
小项目在不适用redis、memcached等工具的情况下,ServletContext是一个不错的用于缓存全局变量的选择!
相关文章推荐
- 关于微信获取access_token接口,返回值为-1000的问题
- 关于微信获取access_token接口,返回值为-1000的问题
- PHP+TP框架实现微信获取JS-SDK所需的access_token,并全局缓存
- 利用SAE的Memcache缓存微信的access_token
- 微信的全局接口使用凭证access_token和网页授权临时access_token
- 微信获取用户信息的两个接口和两个ACCESS_TOKEN
- 夺命雷公狗---微信开发62----所以memcache对access_token进行全局缓存优化
- 微信开发 access_token 缓存方法
- 获取微信基础接口凭证Access_token
- C# 微信access_token缓存和过期刷新
- 微信获取用户信息的两个接口和两个ACCESS_TOKEN
- 微信的全局接口使用凭证access_token和网页授权临时access_token
- 微信接口调用凭证access_token的管理
- php微信开发(1):缓存access_token的方法
- 微信接口开发1--向微信发送请求--获取access_token
- 微信&java 开发6 全局缓存access_token与jsapi_ticket
- 微信调用接口,防止Access_token过期的方法
- 微信接口开发缓存全局token,ticket
- 微信获取用户信息的两个接口和两个ACCESS_TOKEN
- 关于微信获取access_token接口,返回值为-1000的问题