发表于: 2018-01-24 23:05:14

1 688


今天完成的事情

1.学习Memcached 基本命令,改controller。

写入:

set :如果set的key已经存在,则更新key所对应的原来数据,更新的作用。

add:若果add的key存在,不更新,得到响应 NOT_STORED

读取:

get:得到key对应的value,如果key不存在,返回空。


两个查询页面需要频繁的读取数据库内容,改为使用缓存:

//在缓存中查找数据,如果没有,查询数据库,并写入缓存。
try {
if(memcachedClient.get("learnNum")==null){
learnNum = studentMapper.selectByStatus(1);
       memcachedClient.set("learnNum",0,learnNum);
   }
if(memcachedClient.get("workNum")==null){
workNum = studentMapper.selectByStatus(0);
       memcachedClient.set("workNum",0,workNum);
   }
if(memcachedClient.get("collegemap")==null){
collegemap = getCollege.GetCollegeMap();
       String jsonMap = stringJson.MapToJson(collegemap);
       memcachedClient.set("collegemap",0,jsonMap);
    //在缓存中,则直接取缓存中的内容。
   }else {
learnNum = memcachedClient.get("learnNum");
       workNum = memcachedClient.get("workNum");
       String jsonMap = memcachedClient.get("collegemap");
       collegemap = stringJson.JsonToMap(jsonMap);

2.由于memcached只能存文本,我的Map类型需要转换为String,找了一下资料,选择使用Gson进行序列化,和反序列化操作。

toJson();

fromJson();

<dependency>
   <groupId>com.google.code.gson</groupId>
   <artifactId>gson</artifactId>
   <version>2.3.1</version>
</dependency>
public class StringJson {
private Gson gson = new Gson();

   public String MapToJson(Map<Integer, String> map){
String json = gson.toJson(map);
       return json;

   }

public Map<Integer, String> JsonToMap(String json){
Type type = new TypeToken<Map<Integer, String>>() {}.getType();
       Map<Integer, String> map = gson.fromJson(json,type);
       return map;
   }
}


3.在服务器端安装memcache 并启动监听127.0.0.1 11211 ,内存分配64MB.

压测报告:

聚合报告:

tps:

查看nginx日志:发现服务端的响应时间基本位10ms左右,但是压测90%线在1698,说明网络延迟很大。(原因:使用的是国外服务器)

为了排除网络因素的干扰,直接在本地查看controller的响应时间:

使用缓存:                            

不使用缓存:

使用缓存效果很明显,数据库在频繁查询的时候会出现极慢的情况(应该是数据库压力太大),而使用缓存则完全没有。


遇到的问题

1.memcached只支持文本协议,很多类型都需要转换。


收获

1.对缓存的作用有了直观感受,对缓解数据库压力作用很大。

2.memcached在java中的基本写法。

3.学习了序列化与反序列化工具 Gson的基本用法。


明天的计划

1.部署多web应用。

2.学习redis。


任务6开始时间:2018.1.23

预计完成时间:2018.1.28

禅道:http://task.ptteng.com/zentao/project-task.html



                 




返回列表 返回列表
评论

    分享到