发表于: 2019-05-28 21:24:01
1 533
1.今天完成的事情
今天把Jmeter删除重装了一遍,又可以正常使用了。
然后开始学习memcached的基本命令使用,常用的memcached命令如下:
基本参数说明:
key:键值 key-value 结构中的 key,用于查找缓存值。
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据
value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
1.Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。
set 命令的基本语法格式如下:
set key flags exptime bytes [noreply]
value
2.Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。
add 命令的基本语法格式如下:
add key flags exptime bytes [noreply]
value
3.Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。
replace 命令的基本语法格式如下:
replace key flags exptime bytes [noreply]
value
4.Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
get 命令的基本语法格式如下:
get key
多个 key 使用空格隔开,如下:
get key1 key2 key3
5.Memcached delete 命令用于删除已存在的 key(键)。delete 命令的基本语法格式如下:
delete key [noreply]
memcached在ssm项目中的使用:
1.添加依赖包
<!--memcached缓存依赖包-->
<dependency>
<groupId>com.whalin</groupId>
<artifactId>Memcached-Java-Client</artifactId>
<version>3.0.2</version>
</dependency>
2.在springMybatis.xml配置文件中添加如下文件
<!-- 客户端:java_memcached-release_2.6.3 -->
<bean id="memcachedPool" class="com.whalin.MemCached.SockIOPool" factory-method="getInstance" init-method="initialize" lazy-init="true" destroy-method="shutDown">
<constructor-arg>
<value>memcachedPool</value>
</constructor-arg>
<!-- 可以设置多个memcached服务器 -->
<property name="servers">
<list>
<value>127.0.0.1:11211</value>
</list>
</property>
<!-- 每个服务器初始连接数 -->
<property name="initConn">
<value>10</value>
</property>
<!-- 每个服务器最小连接数 -->
<property name="minConn">
<value>20</value>
</property>
<!-- 每个服务器最大连接数 -->
<property name="maxConn">
<value>1000</value>
</property>
<!-- 主线程睡眠时间 -->
<property name="maintSleep">
<value>30000</value>
</property>
<!-- TCP/Socket的参数,如果是true在写数据时不缓冲,立即发送出去参数 -->
<property name="nagle">
<value>false</value>
</property>
<!-- 连接超时/阻塞读取数据的超时间是 -->
<property name="socketTO">
<value>3000</value>
</property>
</bean>
<bean id="memcachedClient" class="com.whalin.MemCached.MemCachedClient" >
<constructor-arg>
<value>memcachedPool</value>
</constructor-arg>
</bean>
3.更改服务层代码,实现memcached缓存功能。
user:部分代码
@Override
public User getUser(@Param("name") String name) {
User user = (User) memCachedClient.get("user" + name);
if (user == null) {
logger.info("user无缓存,开始缓存");
user = mapper.getUser(name);
memCachedClient.set("user" + name, user);
user = mapper.getUser(name);
}
return user;
}
@Override
public User login(@Param("name") String name, @Param("pwd") String pwd) {
User user = (User) memCachedClient.get("user" + name);
if (user == null) {
logger.info("user无缓存,开始缓存");
user = mapper.login(name, pwd);
memCachedClient.set("user" + name + pwd, user);
user = mapper.getUser(name);
}
return user;
}
@Override
public List<User> listUser() {
List<User> users = (List<User>) memCachedClient.get("user");
if (users == null) {
logger.info("users无缓存,开始缓存");
users = mapper.listUser();
memCachedClient.set("user", users);
}
logger.info("users有缓存,读取缓存");
return users;
}
job:
@Override
public List<Job> list() {
List<Job> jobs= (List<Job>) memCachedClient.get("jobs");
if (jobs==null){
logger.info("jobs无缓存,开始缓存");
jobs=mapper.list();
memCachedClient.set("jobs",jobs);
}
logger.info("jobs有缓存,读取缓存");
return jobs;
}
2.明天计划的事情
结束memcached的学习,开始Redis的学习。
3.遇到的问题
对memcached缓存的实现不太理解,卡了很久。
4.收获
学会使用memcached指令在ssm项目中的使用。
评论