发表于: 2017-12-01 16:46:00

1 816


今天完成的事

启动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】

  1. 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


返回列表 返回列表
评论

    分享到