设为首页 收藏本站
查看: 1185|回复: 0

[经验分享] Spring学习(六)——集成memcached客户端

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-31 12:04:20 | 显示全部楼层 |阅读模式
  memcached是高性能的分布式内存缓存服务器。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。
  但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。memcached特别适合
  用来解决上述问题,它可以缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。本例将在前一篇中
  实现的Demo程序基础上集成memcached客户端。
  1、单个服务端安装部署
  官网http://memcached.org/downloads上没有提供windows版本,只有源码,可以自己编译。
  另外,网上找到网友分享的下载链接:
  http://code.jellycan.com/memcached/ 这个链接似乎有点问题,如果有人下载成功望告知。
  http://www.iyunv.com/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  查看统计信息,如下图,说明服务器运作正常。
DSC0000.png
  以上安装过程参考http://www.iyunv.com/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下载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-106787-1-1.html 上篇帖子: memcached的最新状态 下篇帖子: 简单利用Memcached进行缓存层设计
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表