发表于: 2017-12-01 16:46:00
1 815
今天完成的事
启动redis。
原来电脑重启之后redis服务是会自动关闭的。。
【开始用redis缓存我的项目】
先跑个测试类试一下我的redis配置的有没有问题。
开始部署我的项目到redis缓存。
public List<Profession> getAll() {
return taskDao.getAllProfession();
}
public List<Profession> getMobileEnd() {
List<Profession> professionsMoblie;
if (redisUtil.get("professionsMoblie") != null) {
professionsMoblie = (List<Profession>) redisUtil.get("professionsMoblie");
logger.info("从redis里面取到移动端");
return professionsMoblie;
} else {
professionsMoblie = taskDao.getMobileEnd();
redisUtil.set("professionsMoblie", professionsMoblie);
logger.info("从数据库里取移动端并存进缓存");
return professionsMoblie;
}
}
public List<Profession> getFrontEnd() {
List<Profession> professionsFront;
logger.info("ji将进行判定");
if (redisUtil.get("professionsFront") != null) {
professionsFront = (List<Profession>) redisUtil.get("professionsFront");
logger.info("从redis里面取到前端");
return professionsFront;
} else {
professionsFront = taskDao.getFrontEnd();
redisUtil.set("professionsFront", professionsFront);
logger.info("从数据库里取前端并存进缓存");
return professionsFront;
}
}
public List<Profession> getBackEnd() {
List<Profession> professionsBack;
if (redisUtil.get("professionsBack") != null) {
professionsBack = (List<Profession>) redisUtil.get("professionsBack");
logger.info("从redis里面取到后端");
return professionsBack;
} else {
professionsBack = taskDao.getBackEnd();
redisUtil.set("professionsBack", professionsBack);
logger.info("从数据库里取后端并存进缓存");
return professionsBack;
}
}
/*
* 每次插入都要进行一次判断
* */
public void insertProfession(Profession profession) {
taskDao.insertProfession(profession);
if (profession.getType1() == 2) {
List<Profession> professionsFront = taskDao.getFrontEnd();
redisUtil.set("professionsFront", professionsFront);
logger.info("前端的缓存替换了");
}
if (profession.getType1() == 1) {
List<Profession> professionsBack = taskDao.getBackEnd();
redisUtil.set("professionsBack", professionsBack);
logger.info("后端的缓存替换了");
}
if (profession.getType1() == 3) {
List<Profession> professionsMoblie = taskDao.getMobileEnd();
redisUtil.set("professionsMoblie", professionsMoblie);
logger.info("移动端的缓存替换了");
}
}
}
载入页面的时候。
每次我插入一个职业
我的redis完美和项目结合~
进行压测。
数据也是很漂亮,比memcache还要强一些。。。
再去linux 上安装一个redis.
一顿骚操作~~~
安装文档不对。
换一个。
安装成功
linux也成功运行。
遇到的问题
spring配置文件好像不能用正则表达式。。
比如这样配置就可以。
这样配置就不行。。。一点都不智能。。
【一个小bug】
- Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException:
Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?;
nested exception is java.io.EOFException
解决:这个异常是因为序列化和反序列化异常导致的,通常是因为你在redis服务器上手动序列化存储了一个值,然后在代理中进行反序列化获取时报错了。最好就是存取都在代码中完成。
收获
鉴于今天又遇到一个序列化问题
我就多看了点关于这方面的知识
序列化到底有什么用
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
就好像我把java中需要记忆的东西存进内存里,那么java就会给我一个独一无二的口令,我再想拿这个东西,直接用这个口令就好了。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
serialVersionUID: 字面意思上是序列化的版本号,凡是实现Serializable接口的类都有一个表示序列化版本标识符的静态变量
serialVersionUID有两种用途:
1、 在某些场合,希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;
2、 在某些场合,不希望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。
明天计划
整理一下任务六
做一点redis的切面编程,service都要运行一遍redis方法太蠢了。
再做点大胆的想法,把redis序列化放入缓存。
禅道链接http://task.ptteng.com/zentao/task-view-14263.html
评论