问题描述
使用管道流批量添加数据时,怎么能保证全部添加成功,怎样才能知道哪些数据添加成功了,哪些数据添加失败了
问题出现的环境背景及自己尝试过哪些方法
第一次添加 返回值为[1,1,1,1,1,1,1,1........]
第二次添加 返回值为[2,2,2,2,2,2,2,2........]
并不能知道其中添加的具体情况
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
//批量增加redis 手动领取红包批量添加
public List<Object> patchAdd(Map<String,List<Object>> params){
//返回[1, true, 1, true] 1数据在list中的位置 设置过期时间才会返回true和false
List<Object> returnAll = redisTemplate.executePipelined(new SessionCallback<Object>() {
@Override
public <K, V> Object execute(RedisOperations<K, V> redisOperations) throws DataAccessException {
Set<Map.Entry<String, List<Object>>> entries = params.entrySet();
for (Map.Entry<String, List<Object>> param : entries) {
String key = param.getKey();
List<Object> value = param.getValue();
lSet(key,value); //过期时间以秒为单位
}
return null;
}
});
return returnAll;
}
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
pipeline(管道流)可以简单看做是一批命令的顺序处理,
redis自己是会按命令发出的顺序返回命令执行结果的,
我推测java对redis的访问封装应该保持了这个特性
所以你贴的返回值里[1,1,1,1,1,1,1,1........]
里面的每一个1可能就是对应顺序的redis操作返回码
然后就是查文档的工作了,按返回码判断执行结果