??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
Spring学习(五)——集成memcached客户端

转载   2014-07-09   浏览量:249


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

 

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

 

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

 

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

 

1、单个服务端安装部署

 

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

 

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

 

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

 

https://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  查看统计信息,如下图,说明服务器运作正常。

 

image

 

以上安装过程参考//www.kbyp.net/topic/show.do?id=390558。

 

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

 

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

 

复制代码

apply plugin: 'idea' 

apply plugin: 'java'

 

repositories { 

    mavenCentral() 

    maven { url "https://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="https://www.springframework.org/schema/beans" 

       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 

       xmlns:aop="https://www.springframework.org/schema/aop" 

       xsi:schemaLocation="https://www.springframework.org/schema/beans 

        https://www.springframework.org/schema/beans/spring-beans-4.0.xsd 

        https://www.springframework.org/schema/aop 

        https://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秒,符合预期。

转载自:https://www.2cto.com/kf/201407/315249.html

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024



memcached源码阅读----使用libevent
本篇文章主要是我今天阅读memcached源码关于进程启动,在网络这块做了哪些事情。一、iblievent的使用首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基
Spring学习(五)——集成memcached客户端
memcached是高性能的分布式内存缓存服务器。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显
Simple-Spring-Memcached深入研究一
Simple-Spring-Memcached(简称ssm),它也是一个通过Annatation与AOP来完成缓存数据操作的开源项目。仔细看了一下代码,基本上把我之前碰到的问题都解决了,而且MultiCache这一块的实现超出我的预期。该项目主要
java中memcached作为hibernate的二级缓存
因项目的问题,需要用到服务器缓存技术,我们选择了分布式的memcached来作为hibernate的二级缓存,需要用的的jar包如下:memcached-2.1.jarhibernate-memcached-1.2.2.jarspy-2.4.jar另外还需要下载memcached服务...
simple-spring-memcached简介
memcached是一款非常优秀的分布式缓存工具,有效提升了按主键检索数据的性能问题。而simple-spring-memcached组件通过与spring框架整合,让memcached的调用变得更加简单。simple-spring-memcached本质上是采用了...
Memcache客户端连接Java的操作说明
Memcache客户端连接Java的操作说明。Java客户端示例:用户的弹性云服务器已安装好JavaJDK和常用的IDE(如Eclipse)。已获取spymemcached-xyzjar依赖包。
Memcached和Redis分布式锁方案实例讲解
Memcached和Redis分布式锁方案实例讲解。分布式缓存,能解决单台服务器内存不能无限扩张的瓶颈。在分布式缓存的应用中,会遇到多个客户端同时争用的问题。这个时候,需要用到分布式锁,得到锁的客户端才有操作权限。
Redis和Memcached的对比讲解
Redis和Memcached的对比讲解。实际项目开发中,我们经常使用Redis做缓存,也是当前最流行的Nosql数据库,那么Redis有什么优势呢?我们可以和另外一个缓存Memcached做一下比较,让我们在两者比较重来理解Redis的优势和使用。
ehcache、memcache、redis三大缓存的使用比较
ehcache、memcache、redis三大缓存的使用比较。最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!
Memcached概念、原理及使用场合讲解
Memcached概念、原理及使用场合讲解。概念:Memcached是一套分布式内存对象缓存系统,使用于在动态系统中减少数据库负载,提升程序的性能。原理:Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或