• android——使用Interceptor设置缓存来给服务器减负


    为了优化网络环境和减轻服务器负担,很多网络请求都是可以使用缓存的。比如某个界面,每次刷新都会调用接口。这种操作,无形中给服务器增加了几倍的访问量。那么,有没有方法可以减少这类无效的访问呢?答案是肯定的。

    给网络请求加上缓存。并设置缓存时间,当在这个时间段类,可以不用访问服务器,直接拿到上次访问得到的数据。这样,在有效期内,即便网络断开,只要还在缓存有效期内,也可以拿到服务端返回的数据。

    /**
     * Created by admin on 2018/5/8.
     */
    
    public class NetworkInterceptor implements Interceptor {
    
        @Override
        public Response intercept(Chain chain) throws IOException {
            //一、无论有无网路都添加缓存。
            Request request = chain.request();
            Response response = chain.proceed(request);
            int maxAge = 60;
    
            return response.newBuilder()
                    .removeHeader("Pragma")
                    .removeHeader("Cache-Control")
                    .addHeader("name","shone")
                    .header("Cache-Control", "public, max-age=" + maxAge)
                    .build();
        }
    
    }
    

    将Interceptor加入到请求中

        private void testOnlyRequest() throws Exception{
    
            File cacheFile = new File(this.getApplication().getCacheDir(), "caheData");
            //设置缓存大小
            Cache cache = new Cache(cacheFile, 1024*1024*14);//google建议放到这里
    
            //步骤一、创建okhttp3 client
            final   OkHttpClient client = new OkHttpClient.Builder()
                    .retryOnConnectionFailure(true)
                    .connectTimeout(15,TimeUnit.SECONDS)
                    .addNetworkInterceptor(new CacheInterceptor())//这里大家一定要注意了是addNetworkOnterceptor别搞错了啊。
                    .cache(cache)
                    .build();
    
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Retrofit retrofit= new Retrofit.Builder()
                            .baseUrl("http://fy.iciba.com/")
                            .client(client)
                            .addConverterFactory(GsonConverterFactory.create())
                            .build();
                    GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
                    Call<Translation1> call=  request.getCall_1();
                    Translation1 translation1 = null;
                    try {
                        translation1 = call.execute().body();
                        translation1.show();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    
                }
            }).start();
        }

     看看效果:

    log日志可以看出,我发起了三次网络请求。三次都得到了结果。

    在看看我抓包日志。可以看出,我只进行了一次服务器请求。

    通过示例,应该可以看出,添加了缓存,可以明显降低服务器请求次数。

  • 相关阅读:
    java操作elasticsearch实现批量添加主要使用了bulk
    es java scroll滚动查询
    利用Redis Sorted Set实现排行榜功能
    Elasticsearch -删除索引(index)
    Redis简单案例(一) 网站搜索的热搜词
    283 约束布局之1—约束布局简介
    282 Android基本布局之4—网格布局实现计算器布局
    使用Layui、Axios、Springboot(Java) 实现EasyExcel的导入导出(浏览器下载)
    layui在toolbar使用上传控件在reload后失效的问题解决
    axios提交表单
  • 原文地址:https://www.cnblogs.com/shoneworn/p/9014298.html
Copyright © 2020-2023  润新知