WenXiangShi 2021-05-19 11:23 采纳率: 84.2%
浏览 103
已结题

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);
        }
    }

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

  • 写回答

3条回答 默认 最新

  • 记得我雨 2021-05-19 11:41
    关注
    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);
            }
        }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月10日
  • 已采纳回答 9月2日

悬赏问题

  • ¥100 支付宝批量检测实名工具
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题