发表于: 2017-05-08 20:49:05
1 1102
今天完成的事情:
了解下载mamcached
memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached的API使用32位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料
memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。
这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
编写工具类:
package com.jnshu.Util;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.exception.MemcachedException;
import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.xml.registry.infomodel.User;
import java.util.concurrent.TimeoutException;
/**
* Created by 56929 on 2017/5/8.
*/
@Component
@Aspect
public class UserServiceInterceptor {
public static final Logger log = Logger.getLogger(UserServiceInterceptor.class);
//将缓存客户端工具类 MemcachedCache 织入进来
@Autowired
private MemcachedClient memcachedClient;
//* 定义pointcunt
/**
* 环绕装备 用于拦截查询 如果缓存中有数据,直接从缓存中读取;否则从数据库读取并将结果放入缓存
*
* @param call
* @param name
* @return
*/
@Around("aPointcut()&&args(id)")
public User doFindUserByNameAround(ProceedingJoinPoint call, long id) {
User user = null;
try {
if (memcachedClient.get("findUserByName_" + id)!=null) {
user = (User) memcachedClient.get("findUserByName_" + id);
log.debug("从缓存中读取!findUserByName_" + id);
System.out.println("从缓存中读取!");
} else {
try {
user = (User)call.proceed();
if (user != null) {
memcachedClient.set("findUserByName_" + id,0, user);
log.debug("缓存装备被执行:findUserByName_" + id);
System.out.println("缓存装备被执行!");
}
} catch (Throwable e) {
e.printStackTrace();
}
}
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MemcachedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return user;
}
}
明天计划的事情:
加上Memcache,在新建数据的时候同时维护好缓存(没有新建数据接口就自己加上,可以分成是压测JSP和Json接口两种方式) ,确定数据没问题,重新压测服务器,测出90%的线在哪里.
遇到的问题:
笔记本电源适配器坏了....新的明天到....晚上回去无法学习了
收获:
了解了mamcached
评论