发表于: 2017-05-08 20:49:05

1 1103


今天完成的事情:

了解下载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



返回列表 返回列表
评论

    分享到