发表于: 2017-06-16 11:53:09
1 1096
今日完成:
把任务五代码项目加上Memcache
学习Memcache操作命令
添加Memcache步骤:
1.在pom.xml文件里添加依赖,这里我用了com.whalin的包,
<dependency>
<groupId>com.whalin</groupId>
<artifactId>memcached-Java-Client</artifactId>
<version>3.0.2</version></dependency>
2.写memcache配置文件
#设置服务器地址
memcached.server=localhost:11211
#容错
memcached.failOver=true
#设置初始连接数
memcached.initConn=20
#设置最小连接数
memcached.minConn=10
#设置最大连接数
memcached.maxConn=250
#设置连接池维护线程的睡眠时间
memcached.maintSleep=3000
#设置是否使用Nagle算法(Socket的参数),如果是true在写数据时
memcached.nagle=false
#设置socket的读取等待超时时间
memcached.socketTO=3000
#设置连接心跳监测开关
memcached.aliveCheck=true
3.写sping-memcache文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Memcached配置 -->
<bean id="memcachedPool" class="com.danga.MemCached.SockIOPool"
factory-method="getInstance" init-method="initialize" destroy-method="shutDown" >
<constructor-arg>
<value>memCachedPool</value>
</constructor-arg>
<property name="servers">
<list>
<value>${memcached.server}</value>
</list>
</property>
<property name="initConn">
<value>${memcached.initConn}</value>
</property>
<property name="minConn">
<value>${memcached.minConn}</value>
</property>
<property name="maxConn">
<value>${memcached.maxConn}</value>
</property>
<property name="maintSleep">
<value>${memcached.maintSleep}</value>
</property>
<property name="nagle">
<value>${memcached.nagle}</value>
</property>
<property name="socketTO">
<value>${memcached.socketTO}</value>
</property>
</bean>
<bean id="memCachedClient" class="com.danga.MemCached.MemCachedClient">
<constructor-arg>
<value>memCachedPool</value>
</constructor-arg>
</bean>
</beans>
4.然后添加一个service方法和实现方法
5.最后在controller里添加上memcache
明日计划:
解决页面在输入密码登录,解密报错bug
压测服务器
收获:
memcache是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
安装完成后进入usr/local/bin启动memcache
memcached -d -p 11211 -u nobody -c 1024 -m 64
上面的命令意思是:
-d选项是启动一个守护者进程,-p是设置端口,
-u是运行Memcache的用户,-c是最大运行的并发连接数,-m是分配给Memcache使用的内存数量,单位是MB
启动完后使用telnet连接到memcached端口,输入命令:telnet localhost 11211,显示Connected to localhost 说明连接成功
memcached基本命令
set
命令用于向缓存添加新的键值对,如果键已经存在,则之前的值将被替换
add
命令仅当缓冲中不存在键时,add命令才会向缓存中添加一个键值对,如果缓存中已经存在键,则之前的值将仍然保持相同
replace
仅当键已经存在时,replace命令才会替换缓存中的键
get
命令用于检索与之前添加的键值对相关的值
delete
命令用于删除memecached中的任何现有值
memcached高级命令
gets
功能类似于基本的get命令,gets返回的信息多了一个整型 值名称/值对
却别:
get userId
VALUE userId 0 5
12345
END
gets userId
VALUE userId 0 5 4
12345
END
cas
功能类似于set命令,但包括一个额外的值,用于设置名称/值对的值
区别:
set userId 0 0 5
55555
STORED
gets userId
VALUE userId 0 5 6
55555
END
cas userId 0 0 5 6
33333
STORED
问题:
1.运行报错
16-Jun-2017 19:36:36.459 严重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'memcachedPool' defined in class path resource [conf/spring-memcached.xml]: Could not resolve placeholder 'memcached.server' in string value "${memcached.server}"; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'memcached.server' in string value "${memcached.server}"
原因是memcache配置文件,手快多打了一个字母。。。
2.tomcat启动报错
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tilesConfigurer': Failed to introspect bean class [org.springframework.web.servlet.view.tiles3.TilesConfigurer] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/apache/tiles/startup/TilesInitializer
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors
原因是缺少tiles-servlet.jar包
3.解密错误
2017-06-17 01:22:18,832 [http-nio-8080-exec-4] DEBUG [org.springframework.web.servlet.DispatcherServlet] - Could not complete request
javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes
启动tomcat输入密码点击登录报错,百度说是DES加密的长度必须是8的倍数
评论