一般追求体验和速度的网站都会使用CDN技术,下面就说一下常用的阿里云CDN,但是CDN就不可避免的需要去刷新指定文件或者文件夹的缓存,但阿里云后台的管理员账号密码不是一般人能访问的,手动刷新效率也很低,所以往往需要项目里可以直接刷新CDN缓存。
你以为就这一点点参数就可以了吗?你们可以看看这位仁兄写的代码
为什么那位仁兄写这么多代码呢,主要是为了这些公共参数,阿里云为了规范和验证请求合法性,肯定会给你一大堆验证,所以肯定需要多重验证,那为什么我敢说我的实现是黑科技呢?主要是代码少,容易理解,废话不多说,下面教你如何实现快速实现后台刷新阿里云CDN接口。
因为公司服务器部署在阿里云上,能很快的访问阿里云服务器,所以直接用阿里云的maven私服,直接去下载jar包,当然你也可以先下载好上传到自己公司私服上。阿里云私服
附上贼快的阿里云maven仓库
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<repositories><!-- 代码库 -->
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
这个是阿里云文档的配置,用哪个都行
<repositories>
<repository>
<id>sonatype-nexus-staging</id>
<name>Sonatype Nexus Staging</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-cdn</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.0.8</version>
</dependency>
黑科技就在下载的这两个包里,接着你只写上下面那段代码就可以调用刷新CDN缓存了
package com.galaxy.wgroup.common.utils;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.cdn.model.v20141111.RefreshObjectCachesRequest;
import com.aliyuncs.cdn.model.v20141111.RefreshObjectCachesResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
/**
* Created by fengyiming on 2016/9/20.
*/
public class AliyunCdnUtlis {
//阿里云管理员账号给你生成的key和value
private final static String ACCESS_KEY_ID = "YOUR_KEY";
private final static String ACCESS_KEY_VALUE = "YOUR_KEY_VALUE";
private final static String OBJECT_TYPE_FILE = "File";
private final static String OBJECT_TYPE_DIRECTORY = "Directory";
/**
* 刷新一个文件
* @param url
* @return
*/
public static RefreshObjectCachesResponse reflushFileCDN(String url) {
RefreshObjectCachesRequest describe = new RefreshObjectCachesRequest();
describe.setObjectPath(url);
describe.setObjectType(OBJECT_TYPE_FILE);
return reflush(describe);
}
/**
* 刷新文件夹
* @param packageUrl
* @return
*/
public static RefreshObjectCachesResponse reflushPackageCDN(String packageUrl) {
RefreshObjectCachesRequest describe = new RefreshObjectCachesRequest();
describe.setObjectPath(packageUrl);
describe.setObjectType(OBJECT_TYPE_DIRECTORY);
return reflush(describe);
}
private static RefreshObjectCachesResponse reflush(RefreshObjectCachesRequest describe){
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_VALUE);
IAcsClient client = new DefaultAcsClient(profile);
try {
RefreshObjectCachesResponse response
= client.getAcsResponse(describe);
return response;
} catch (ClientException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
是不是很方便,当然刷CDN你得注意阿里云后台设置要正确,不然光能在阿里云后台看到刷新请求单没起作用。
记得当初公司网站的CDN回源比例特别高,跟运维调查了很久,有时候还得去提个工单问问专业的人如何设置阿里云CDN缓存。