Spring学习(五)——集成memcached客户端

memcached是高性能的分布式内存缓存服务器。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。

但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。memcached特别适合

用来解决上述问题,它可以缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。本例将在前一篇中

实现的Demo程序基础上集成memcached客户端。

1、单个服务端安装部署

官网http://memcached.org/downloads上没有提供windows版本,只有源码,可以自己编译。

另外,网上找到网友分享的下载链接:

http://code.jellycan.com/memcached/ 这个链接似乎有点问题,如果有人下载成功望告知。

http://www.jb51.net/softs/44843.html 这个可以用。

1.1、解压到指定目录,如:C:\Memcached\memcached-win32-1.4.4-14。

1.2、用cmd打开命令窗口,转到解压的目录,输入 “memcached.exe -d install”。

1.3   打开控制面板,打开服务,可以看到memcached已经在上面可,如果没有启动,则手动启动一下。

或者执行:‘D:\memcached\memcached.exe -d start‘启动,这样memcache就会作为windows系统服务在每 次开机时启动memcache服务。

1.4  使用telnet localhost 11211命令验证缓存服务器是否可用。

如果是Windows7系统下,需要先通过“控制面 板” 一〉“程序” 一〉“打开或关闭windows功能”,安装“telnet客户端”。

1.5 开始什么都不显示,回车后输入命令  stats  查看统计信息,如下图,说明服务器运作正常。

以上安装过程参考http://www.jb51.net/article/30334.htm

2、在Spring框架中集成客户端

2.1 修改gradle文件,增加依赖包,代码如下:

apply plugin: ‘idea‘
apply plugin: ‘java‘

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/release" }
}

dependencies {
    compile(
            "org.springframework:spring-context:4.0.5.RELEASE",
            "org.springframework:spring-web:4.0.5.RELEASE",
            "org.springframework:spring-webmvc:4.0.5.RELEASE",
            "org.springframework:spring-context-support:4.0.5.RELEASE",
            "org.apache.velocity:velocity:1.7",
            "org.apache.velocity:velocity-tools:2.0",
            "org.anarres.gradle:gradle-velocity-plugin:1.0.0",
            "org.springframework:spring-jdbc:4.0.5.RELEASE",
            "commons-dbcp:commons-dbcp:1.4",
            "org.springframework:spring-test:4.0.5.RELEASE",
            "org.testng:testng:6.8.8",
            "org.mybatis:mybatis:3.2.7",
            "org.springframework:spring-tx:4.0.5.RELEASE",
            "org.springframework:spring-orm:4.0.5.RELEASE",
            "org.mybatis:mybatis-spring:1.2.2",
            "com.googlecode.xmemcached:xmemcached:2.0.0",
            "com.google.guava:guava:17.0",
            "org.codehaus.jackson:jackson-mapper-asl:1.9.13",
            "com.google.code.simple-spring-memcached:simple-spring-memcached:3.5.0",
            "com.google.code.simple-spring-memcached:xmemcached-provider:3.5.0"
    )
    testCompile("org.springframework:spring-test:4.0.5.RELEASE")
    runtime("jstl:jstl:1.2")
}

task copyJars(type: Copy) {
    from configurations.runtime
    into ‘lib‘ // 目标位置
}

运行命令:gradle copyJars下载。

2.2 修改Spring配置文件,加入以下配置:

<import resource="simplesm-context.xml" />
<import resource="xmemcached.xml"/>

2.3 在resources下添加文件xmemcached.xml,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <bean name="defaultMemcachedClient" class="com.google.code.ssm.CacheFactory">
        <property name="cacheClientFactory">
            <bean class="com.google.code.ssm.providers.xmemcached.MemcacheClientFactoryImpl"/>
        </property>
        <property name="addressProvider">
            <bean class="com.google.code.ssm.config.DefaultAddressProvider">
                <property name="address" value="127.0.0.1:11211"/>
            </bean>
        </property>
        <property name="configuration">
            <bean class="com.google.code.ssm.providers.CacheConfiguration">
                <property name="consistentHashing" value="true"/>
            </bean>
        </property>
    </bean>
</beans>

2.4 修改domain文件夹下的User实体,修改如下:

@CacheKeyMethod
public String getUserName() {
        return userName;
}

通过@CacheKeyMethod标签为实体指定Key值

2.5 修改dao文件夹下的getUserByUserName函数,如下:

@ReadThroughSingleCache(namespace = NAMESPACE, expiration = 3600)
@Override
public User getUserByUserName(@ParameterValueKeyProvider String userName) {
        try {
            Thread.sleep(4000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return (User)sqlSession.selectOne("domain.User.getUserByUserName", userName);
}

添加@ReadThroughSingleCache切入点表示:组件首先从缓存中读取数据,取到数据则跳过查询方法,直接返回。

取不到数据再执行查询方法,并将查询结果放入缓存,以便下一次获取。

namespace参数自己指定,与其他实体相区分即可;expiration表示缓存失效时间,单位秒。

@ParameterValueKeyProvider指定的参数,如果该参数对象中包含CacheKeyMethod注解的方法,则调用其方法,否则调用toString方法。

为了查看测试效果,进入查询方法后执行Thread.sleep(4000)等待4秒。

2.6 单元测试

修改getUserByUserName函数,打印出执行时间。

@Test
public void getUserByUserName() {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        System.out.println(df.format(new Date())); //×××××××××××××××1
        User user = userService.getUserByUserName("admin");
        System.out.println(df.format(new Date()));//×××××××××××××××2

//        assertEquals(user.getUserName(), "admin");

        user = userService.getUserByUserName("admin");
        System.out.println(df.format(new Date()));//×××××××××××××××3
        assertEquals(user.getUserName(), "admin");
}

测试结果:1,2处打印的时间间隔大于等于4秒,2,3处打印的时间间隔小于4秒,符合预期。

源码下载:http://files.cnblogs.com/wenjingu/VelocityDemo5.0.zip  lib中的jar包上传时已删除,请运行命令:gradle copyJars下载。

Spring学习(五)——集成memcached客户端

时间: 2024-10-13 08:57:23

Spring学习(五)——集成memcached客户端的相关文章

Spring学习(五)--构建Spring Web应用程序

一.Spring MVC起步 看过猫和老鼠的小伙伴都可以想象Tom猫所制作的捕鼠器:它的目标 是发送一个小钢球,让它经过一系列稀奇古怪的装置,最后触发捕鼠 器.小钢球穿过各种复杂的配件,从一个斜坡上滚下来,被跷跷板弹起,绕过一个微型摩天轮,然后被橡胶靴从桶中踢出去.经过这些后,小钢球会对那只可怜又无辜的老鼠进行捕获.而Spring MVC框架与捕鼠器有些类似.Spring将请求在调度Servlet.处理器映射(handler mapping).控制器以及视图解析器(view resolver)之

Spring学习五、Java配置Spring与代理模式

九.使用Java的方式配置Spring JavaConfig是Spring的一个子项目,在Spring4之后,成为了核心功能 @Configuration public class MyConfig { @Bean public User getUser() { return new User(); } } 纯Java配置,在SpringBoot中随处可见 十.代理模式 代理模式是SpringAOP的底层! 代理模式的分类 静态分类 动态代理 10.1 静态代理 角色分析: 抽象角色:一般会使用

spring学习 五 依赖注入的方式

依赖注入有两种方式: 1 构造注入,如果<bean>标签下使用<contructor-arg>,则是构造注入 2 setter注入,就是调用setter方法注入,如果<bean>标签下使用<property>标签,就是setter注入 2.1: 如果属性是基本数据类型或 String 等简单类型 <bean id="peo" class="com.bjsxt.pojo.People"> <proper

Spring学习(五)——集成MyBatis

本篇我们将在上一篇http://www.cnblogs.com/wenjingu/p/3829209.html的Demo程序的基础上将 MyBatis 代码无缝地整合到 Spring 中. 数据库仍然采用前一篇文章中定义的数据库sampledb. 1.修改gradle文件,增加依赖包,代码如下: apply plugin: 'idea' apply plugin: 'java' repositories { mavenCentral() maven { url "http://repo.spri

分布式memcached学习(五)&mdash;&mdash; memcached java客户端的使用

  Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方. Memcached现在已被广泛使用,客户端实现也有较多的版本,基本上各个语言的都有.比如:Memcached client for Java.Spymemcached.xMemcached,各自有各自的优缺点.由于Memcached client for Java是Memcached官方发布

Spring学习(一)tomcat加载web.xml、以及项目集成Spring支持

tomcat容器加载web.xml 一. 1 .启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取 <listener> 和 <context-param> 两个结点. 2 .紧急着,容创建一个 ServletContext ( servlet 上下文),这个 web 项目的所有部分都将共享这个上下文. 3 .容器将 <context-param> 转换为键值对,并交给 servletContext . 4 .容器创建 <li

使用memcached客户端Xmemcached与Spring整合

1 简介 Xmemcached是一个高性能的基于java nio的memcached客户端.在经过三个RC版本后,正式发布1.10-final版本. xmemcached特性一览: 1.高性能 2.支持完整的memcached文本协议,二进制协议将在1.2版本实现. 3.支持JMX,可以通过MBean调整性能参数.动态添加/移除server.查看统计等. 4.支持客户端统计 5.支持memcached节点的动态增减. 6.支持memcached分布:余数分布和一致性哈希分布. 7.更多的性能调整

Spring学习(五)bean装配详解之 【XML方式配置】

本文借鉴:Spring学习(特此感谢!) 一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 最优先:通过隐式 Bean 的发现机制和自动装配的原则. 基于约定优于配置的原则,这种方式应该是最优先的 好处:减少程序开发者的决定权,简单又不失灵活. 其次:Java 接口和类中配置实现配置 在没有办法使用自动装配原则的情况下应该优先考虑此类方法 好处:避免 XML 配置的泛滥,也更为容易.

不错的Spring学习笔记(转)

Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是spring.jar和commons-logging.jar.此外为了便于测试加入了JUnit包.   在Myeclipse中创建Java项目.   编写一个接口类,为了简单,只加入了一个方法.   Java代码   1.package com.szy.spring.interfacebean;