redisTemplate ValueOperations increment get null - PullRequest
0 голосов
/ 26 августа 2018

Прежде всего, я должен сказать, что ключ существует в Redis, Этот ключ представляет собой саморазвивающуюся последовательность, Но иногда получение этого ключа является нулевым. Я использовал spring-boot: 2.0.4.0.release Я ожидаю, что получу номер заказа за один раз, чтобы увеличить свое значение. Не могли бы вы посоветовать решение для моего сценария? Спасибо!

@Override
@Transactional(rollbackFor = Exception.class)
public boolean paymentBatchMeter(UserDescriptor user, String areaCode, String newPrice) {
    List<Meter> meters = meterService.findAllByFilterAndAreaCode(null, areaCode, user);
    if (meters != null && meters.size() > 0) {
        List<TaskValue> taskValueList = new ArrayList<>();
        meters.forEach(meter -> {
            if (meter.getState() == 1) {
                Task task = new Task();
                task.setCode(meter.getCode());

                TaskValue taskValue = new TaskValue();
                taskValue.setId(task.getId());
                taskValue.setMeterType(meter.getMeterDicCode());
                taskValue.setCode(meter.getCode());

                Long orderIndex = redisTemplate.opsForValue().increment("athena:order:index", 1);
                if (orderIndex == null) {
                    throw new IllegalStateException("error!");
                }
                taskValueList.add(taskValue);

                Order order = new Order();
                order.setCustomerId(meter.getCustomerId());
                order.setCode(orderIndex.toString());
                order.setCreateTime(new Date());
                order.setMeterId(meter.getId());
                order.setState(0);
                order.setRechargeMoney(new BigDecimal(newPrice));
                List<DicProjectItem> dicProjectItems = dicProjectItemMapper.getDicProjectItemAll("D10015", 1);
                String dicProjectItemId = dicProjectItems.stream().filter(p -> "002".equals(p.getCode())).collect(Collectors.toList()).get(0).getId();
                order.setRechargeWayDicId(dicProjectItemId);
                order.setRechargeState(1);
                order.setTaskId(task.getId());
                order.setOperatorId(user.getId());
            }
        });

        redisTemplate.setEnableTransactionSupport(true);
        taskValueList.forEach(taskValue -> {
            if ("004".equals(taskValue.getMeterType())) {
                redisTemplate.convertAndSend(TOPIC, taskValue.getCode());
                redisTemplate.opsForList().rightPush("athena:concentrator:meter:task:" + taskValue.getCode(), JSON.toJSONString(taskValue));
            } else {
                redisTemplate.opsForList().rightPush("athena:meter:task:" + taskValue.getCode(), JSON.toJSONString(taskValue));
            }
        });
        redisTemplate.setEnableTransactionSupport(false);

        return true;
    }

    return false;
}
...