发表于: 2017-11-19 22:18:45
1 613
今天做的事情:
首先自我检讨。没有之前那种紧迫感,那种专注力。任务六懈怠了,没有好好去找资料看,也没有去咨询一下师兄任务六的要求。导致现在才明白该做什么,然后有点懒,不想动手之类的。这些都是问题。现在开始注意自身的问题,当师兄发现我的状态不对时,告诫我。
昨天找的一个教程是两个字段的测试,可以跑通,于是思路是根据找个做一个登录,期间遇到bean类未加载成功。空指针异常等。报错500信息。没有全部看完,博韬师兄看了一眼原来是构造方法未定义。
还是贴一下之前写的代码。
@RequestMapping(value = "/loginUser",method = RequestMethod.POST)
public String loginUser(UserBean userBean){
System.out.println(userBean+"刚传来的user2");
int i = serviceI.addlogin(userBean);
if(i>0){
System.out.println("数据库增加成功!");
cachedClient.add("user", userBean);
System.out.println(cachedClient.get("user")+"缓存中的user");
}else{
System.out.println("重复用户名或者增加错误!");
return "error";
}
return "MeSuccess";
}
虽然做登录是不行的,不过使用工具类进行增加或者查询,应该就如上所示,使用put,add等,只要整理好数据,一步一步走,不难。
- 基本数据操作
- set 设置指定键值对
- add 若当前键值Key不存在,添加指定键值对
- replace 若当前键值Key存在,更新当前Value值
- get 获取指定键值对
- delete 删除指定键值对
- set 设置指定键值对
- 高级数据操作
- gets 获取键值key对应的值,返回信息中携带版本号
- cas 指定版本号对键值key进行赋值,版本号不匹配,允许赋值
- gets 获取键值key对应的值,返回信息中携带版本号
- 缓存管理操作
- stats 统计当前memcached 的数据信息。
- flush_all 清
基本的数据操作就可以满足日常操作。
再来说一下之前的测试,首先需要缓存的实体类,必须实现Serializable
工具类
public class MemcachedUtil {
//memcached客户端单例
private static MemCachedClient cachedClient = new MemCachedClient();
//初始化连接池
static {
//获取连接池实例
SockIOPool pool = SockIOPool.getInstance();
//服务器列表及其权重
String[] servers = {"127.0.0.1:11210"};
Integer[] weights = {3};
//设置服务器信息
pool.setServers(servers);
pool.setWeights(weights);
//设置初始化连接数,最小连接数,最大连接数,最大处理时间
pool.setInitConn(10);
pool.setMinConn(10);
pool.setMaxConn(1000);
pool.setMaxIdle(1000*60*60);
//设置连接池守护线程的睡眠时间
pool.setMaintSleep(60);
//设置TCP参数,连接超时
pool.setNagle(false);
pool.setSocketTO(60);
pool.setSocketConnectTO(0);
//初始化并启动连接池
pool.initialize();
//压缩设置,超过指定大小的都压缩
// cachedClient.setCompressEnable(true);
// cachedClient.setCompressThreshold(1024*1024);
}
private MemcachedUtil(){
}
public static boolean add(String key, Object value) {
return cachedClient.add(key, value);
}
public static boolean add(String key, Object value, Integer expire) {
return cachedClient.add(key, value, expire);
}
public static boolean put(String key, Object value) {
return cachedClient.set(key, value);
}
public static boolean put(String key, Object value, Integer expire) {
return cachedClient.set(key, value, expire);
}
public static boolean replace(String key, Object value) {
return cachedClient.replace(key, value);
}
public static boolean replace(String key, Object value, Integer expire) {
return cachedClient.replace(key, value, expire);
}
public static Object get(String key) {
return cachedClient.get(key);
}
测视类
public class MemcachedUtilTest {
@Test
public void testMemcached() {
MemcachedUtil.put("hello", "lininghu", 60);
String hello = (String) MemcachedUtil.get("hello");
Assert.assertEquals("lininghu", hello);
for(int i = 0; i < 100; ++i) {
UserBean user = new UserBean("xiaohu" + i, "123" + i);
MemcachedUtil.put("user" + i, user, 60);
Object obj = MemcachedUtil.get("user" + i);
// System.out.println(obj);
Assert.assertEquals(user, obj);
}
}
以及在spring.xml中的配置,及
private MemCachedClient cachedClient;
@Before
public void init() {
ApplicationContext context = new ClassPathXmlApplicationContext("Spring.xml");
cachedClient = (MemCachedClient)context.getBean("memcachedClient");
}
@Test
public void testMemcachedSpring() {
UserBean user = new UserBean( "xiaohu", "你说");
cachedClient.set("user", user);
UserBean cachedBean = (UserBean)user;
System.out.println(cachedBean+"-----------");
Assert.assertEquals(user, cachedBean);
}
}
关于缓存这块:使用缓存将数据放到内存中,当有请求数据时,减少对数据库的操作,对于大型网站访问,起到很大作用。
简单看一下,明天要求完成,将缓存实现,配置nginx的负载均衡。如果还有时间,做一下redis的工具类连接java代码对数据操作。
遇到的问题:
应该算是思路不清晰,手懒,调整。
收获:
思路清晰,会使用memcached的工具类进行操作,redis其实和它差不多的命令。对缓存有所了解。
评论