Java 七牛缓存刷新
来源:互联网 发布:java 线程模型 编辑:程序博客网 时间:2024/05/16 09:37
由于七牛提供的文档不怎么好懂(有的功能根本在api中在不到答案),另外百度搜索的答案也不尽如意。折腾了两天,终于搞懂了通过调用七牛提供的API去刷新缓存!!
场景:APP中关于帮助说明原先都是写死的html静态文件,每次更改内容都是直接去服务器去改,很不方便也不安全,然后现在想通过后台去维护这些数据,而我们公司使用的就是七牛来管理文件的。所以现在的需求就是:①、通过后台使用七牛来管理这些文件;②、app不做任何更改。
1、通过后台使用七牛来管理文件。参考官网api,地址:http://developer.qiniu.com/code/v7/sdk/java.html。
2、既然App不做任何更改,所以需要做到覆盖上传。在实际开发时,发现覆盖能成功覆盖文件内容,但是缓存那是相当的严重!本来可以通过在访问地址后台带上随机的参数可以获取最新的文件内容,但是违背了“app不做任何更改”的原则。最后发现可以通过七牛提供的api去刷新缓存:
private static final String MAC_NAME = "HmacSHA1";private static final String ENCODING = "UTF-8";/** * 刷新七牛缓存 * * @param url * @param params * @param codePage * @return * @throws Exception */public synchronized static String postDataByAuthorization(String url, String jsonString, String codePage)throws Exception {HttpPost method = new HttpPost(url);// 设置请求和传输超时时间RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(200 * 1000).setConnectTimeout(200 * 1000).build();method.setConfig(requestConfig);// Authorization值为 "QBox <ak>:<token>"method.addHeader("Authorization", "QBox " + QiniuUtil.ACCESS_KEY + ":" + getTokenOfQiniu());method.setHeader("Content-type", "application/json; charset=utf-8");method.setHeader("Accept", "application/json");method.setEntity(new StringEntity(jsonString, Charset.forName(codePage)));CloseableHttpClient httpClient = HttpClientBuilder.create().build();HttpResponse response = httpClient.execute(method);return EntityUtils.toString(response.getEntity());}/** * 获取七牛缓存刷新的token * * @return * @throws Exception */private static String getTokenOfQiniu() throws Exception {byte[] sign = hmacSHA1Encrypt("/v2/tune/refresh\n", QiniuUtil.SECRET_KEY);String encodedSign = EncodeUtils.urlsafeEncodeString(sign);return encodedSign;}/** * 使用 HMAC-SHA1 签名方法对对encryptText进行签名 * * @param encryptText 被签名的字符串 * @param encryptKey 密钥 * @return * @throws Exception */public static byte[] hmacSHA1Encrypt(String encryptText, String encryptKey) throws Exception {byte[] data = encryptKey.getBytes(ENCODING);// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);// 生成一个指定 Mac 算法 的 Mac 对象Mac mac = Mac.getInstance(MAC_NAME);// 用给定密钥初始化 Mac 对象mac.init(secretKey);byte[] text = encryptText.getBytes(ENCODING);// 完成 Mac 操作return mac.doFinal(text);}</span>
说明:
1、在刷新缓存过程中,主要是token大家不知道怎么生成,也是我费时最多的!可以参考我上面生成token的代码,也可以参考官网通过shell命令生成token(地址:http://developer.qiniu.com/article/fusion/api/refresh.html#refresh-request-message);
2、遗憾的是,通过api去刷新缓存也不是实时的,还是会有大概10分钟左右的缓存时间,不过总比一直缓存这强......我也是醉了。
好了最后总结,如果不想被缓存这么,可以在生成文件的时候,传入随机的key,这样访问的地址就不固定了,也就不会出现缓存问题;如果访问url必须固定,可以在url地址后加上随机参数(例如v=20160921154089881212);如果不能增加参数,想我遇到的这种情况一样的,就像我这样调用api就好了。
- Java 七牛缓存刷新
- 七牛缓存问题的解决办法
- 刷新图标缓存
- 刷新ORACLE缓存
- 刷新dns缓存
- 如何刷新DNS缓存
- 刷新DNS缓存
- window刷新dns缓存
- 刷新电脑DNS缓存
- Wordpress 刷新缓存
- 去除缓存+刷新快捷键
- 七牛云存储刷新缓存
- ionic state 缓存刷新
- 浏览器刷新+缓存原理
- OPcache 文件缓存刷新
- 刷新页面缓存动作
- 【Win10】刷新DNS缓存
- 七牛---关于刷新接口的具体使用说明
- linux 题目 (三)
- Linux环境编程导引
- List<map<String,String>>根据选择的key去重
- BZOJ 3132: 上帝造题的七分钟【树状数组(二维区间加,区间查询
- Atitit.词法分析的原理 理论
- Java 七牛缓存刷新
- android—init.rc的读取
- cocos2d-JS 打包APK 无限加载资源、黑屏解决方案
- 大明A+B(第一周c题)大数相加
- 深度学习与人脸识别系列(4)__利用caffe训练深度学习模型
- 【读书笔记】《Effective Java》(6)--方法
- linux题目 (四)
- hmailserver设置用户账户密码加密类型
- vagrant 网络连接失败