ssm项目redis存取值 和设置过期时间的一些问题 有些困惑。代码如下所示、

ssm想从redis里面取存进去的list集合 但是在实现层里return的字符串类型不一致。下面是我写的代码请帮忙看看该怎么改?

先说想法,调用完接口之后 判断是否存在key值 不存在的话redisUtil.set把值存进去设置好过期时间(这里我直接存的list)不知道对不对,然后接口的实现层里 如果key值存在 那么返回存在redis里的那个list ,如果过期了不存在了 就从新查数据库!避免高并发的

controller里

jtparticipationunitscustom.setLoginid(account.getLoginid());
		jtparticipationunitscustom.setStartno(startno);
		jtparticipationunitscustom.setEndno(endno);
		jtparticipationunitscustom.setProjectcode(account.getProjectcode());
		List<JtParticipationUnitsCustom> list = participationService.findJtPagingList(jtparticipationunitscustom);
		boolean haskey=redisTemplate.hasKey("participationlist");
		if (!haskey){
			redisUtil.set("participationlist",list,Long.parseLong("180"));
			System.out.println("111111111"+redisUtil.get("participationlist"));
		}

		int total = participationService.getJtTotalCount(jtparticipationunitscustom);
		
		map.put("rows", list);
		map.put("total", total);
		return map;

实现层里

  @Override
    public List<JtParticipationUnitsCustom> findJtPagingList(JtParticipationUnitsCustom entity) {
        try {
            if (redisTemplate.hasKey("participationlist")){
                return redisUtil.get("participationlist");//这行代码有问题 返回类型不正确
            }else {
                return participationDao.findJtPagingList(entity);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

就是不知道是我存值得时候有问题 还是取值取得写法有问题 麻烦帮我看看

  1. redisUtil.set的方法中是不是把list的数组转化为String放到redis里面了,这样从redis获取的值也是String类型,会类型转化失败。从redis取出之后自己手动转化为想要的list数组。
  2. 或者修改redis客户端的序列化和反序列化,使其支持java的序列化和反序列化
  3. 或者这样修改代码 
jtparticipationunitscustom.setLoginid(account.getLoginid());
		jtparticipationunitscustom.setStartno(startno);
		jtparticipationunitscustom.setEndno(endno);
		jtparticipationunitscustom.setProjectcode(account.getProjectcode());
		List<?> list = participationService.findJtPagingList(jtparticipationunitscustom);
		boolean haskey=redisTemplate.hasKey("participationlist");
		if (!haskey){
			redisUtil.set("participationlist",list,Long.parseLong("180"));
			System.out.println("111111111"+redisUtil.get("participationlist"));
		}
		int total = participationService.getJtTotalCount(jtparticipationunitscustom);
		
		map.put("rows", list);
		map.put("total", total);
		return map;
  @Override
    public List<?> findJtPagingList(JtParticipationUnitsCustom entity) {
        try {
            if (redisTemplate.hasKey("participationlist")){
                return JSONArray.parse(redisUtil.get("participationlist"));
            }else {
                return participationDao.findJtPagingList(entity);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

 

存,取的时候,应该设置成list类型,实体类,要支持序列化,这样正常情况下,不回出现问题

redisUtil.get("participationlist")和findJtPagingList返回类型不匹配,你应该先看看redisUtil.get("participationlist")返回类型,然后看看能不能转成List<JtParticipationUnitsCustom>(redisUtil.get("participationlist"));