发表于: 2019-05-28 21:24:01

1 534


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项目中的使用。


返回列表 返回列表
评论

    分享到