Redis使阿里云删除文件失败

donghc1993 2018-02-27 09:42:19
调用deleteFile方法时无法删除文件,怀疑和Redis有关,于是在删除文件后调用了Thread.sleep(100),文件成功删除,在debug模式下,deleteFile方法并未抛异常,求解Redis为何会影响调用阿里云删除文件的功能
public String deleteFile(OssTools.Bucket bucket, String key) {
OSSClient ossClient = AliyunOSSClient.getOSSClient();
ResultJson resultJson = new ResultJson();
try {
ossClient.deleteObject(bucket.getName(), key);
Thread.sleep(100);
RedisClient.lrem(bucket.getBasePath(),1L,"http://" + bucket.getName() + "." + AliyunOSSClient.getDefaultDomain() + "/" + key);
resultJson.setSuccess(true);
} catch (OSSException oe) {
resultJson.setSuccess(false);
resultJson.setErrorCode(oe.getErrorCode());
resultJson.setErrorMessage(oe.getErrorMessage());
resultJson.setErrorType("OSSException");
} catch (ClientException ce) {
resultJson.setSuccess(false);
resultJson.setErrorType("ClientException");
resultJson.setErrorMessage(ce.getErrorMessage());
} catch (Exception e) {
resultJson.setSuccess(false);
resultJson.setErrorMessage(e.getMessage());
}
return JSONObject.fromObject(resultJson).toString();
}

public static Long lrem(String key, Long count, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.lrem(key, count, value);
jedis.close();
return result;
}
...全文
770 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiongdejun 2018-03-01
  • 打赏
  • 举报
回复
引用 7 楼 xiongdejun 的回复:
引用 5 楼 donghc1993 的回复:
[quote=引用 4 楼 xiongdejun 的回复:] 既然加上Thread.sleep(100);这个可以删除。你就应该考虑到线程的问题。很明显两个操作启动一个或俩个都单独启用了一个线程。然后这三个或者两个线程某些地方冲突了。导致无法删除
redis操作是去连接redis数据库,删除文件操作是通过http调用阿里云的云服务接口,我想不到有什么冲突的地方,另外冲突了不会抛异常么?
这个要看抛的是什么异常了,我建议你把两个操作用不同的try catch 抛出,也就是说写两个try不同处理 还有楼上说的事务控制也有关系的,因为你的方法明是deleteFile 你如果使用了Spring控制的事务是否把delete开头的方法统一默认加上了事务控制[/quote] 补充一下,你这样貌似失败了是没有提示的吧?建立把 return JSONObject.fromObject(resultJson).toString();这行代码另外放在finally里 如果抛出异常了,还有返回值,否则你抛出异常了,就没有返回值了
xiongdejun 2018-03-01
  • 打赏
  • 举报
回复
引用 5 楼 donghc1993 的回复:
引用 4 楼 xiongdejun 的回复:
既然加上Thread.sleep(100);这个可以删除。你就应该考虑到线程的问题。很明显两个操作启动一个或俩个都单独启用了一个线程。然后这三个或者两个线程某些地方冲突了。导致无法删除
redis操作是去连接redis数据库,删除文件操作是通过http调用阿里云的云服务接口,我想不到有什么冲突的地方,另外冲突了不会抛异常么?
这个要看抛的是什么异常了,我建议你把两个操作用不同的try catch 抛出,也就是说写两个try不同处理 还有楼上说的事务控制也有关系的,因为你的方法明是deleteFile 你如果使用了Spring控制的事务是否把delete开头的方法统一默认加上了事务控制
donghc1993 2018-02-28
  • 打赏
  • 举报
回复
引用 4 楼 xiongdejun 的回复:
既然加上Thread.sleep(100);这个可以删除。你就应该考虑到线程的问题。很明显两个操作启动一个或俩个都单独启用了一个线程。然后这三个或者两个线程某些地方冲突了。导致无法删除
redis操作是去连接redis数据库,删除文件操作是通过http调用阿里云的云服务接口,我想不到有什么冲突的地方,另外冲突了不会抛异常么?
donghc1993 2018-02-28
  • 打赏
  • 举报
回复
引用 3 楼 u011594442 的回复:
[quote=引用 2 楼 donghc1993 的回复:] [quote=引用 1 楼 u011594442 的回复:] 那你redis的执行正常吗?
redis有问题,但代码执行过程没有抛异常,我想知道的是后面执行的redis为什么会影响前面的删除文件操作[/quote] 数据库操作添加了事物控制吧[/quote]删除文件是直接通过http调用阿里云的OSS云服务接口,不是很明白和事务控制有什么关系
xiongdejun 2018-02-28
  • 打赏
  • 举报
回复
既然加上Thread.sleep(100);这个可以删除。你就应该考虑到线程的问题。很明显两个操作启动一个或俩个都单独启用了一个线程。然后这三个或者两个线程某些地方冲突了。导致无法删除
Sunyiban 2018-02-28
  • 打赏
  • 举报
回复
引用 2 楼 donghc1993 的回复:
[quote=引用 1 楼 u011594442 的回复:] 那你redis的执行正常吗?
redis有问题,但代码执行过程没有抛异常,我想知道的是后面执行的redis为什么会影响前面的删除文件操作[/quote] 数据库操作添加了事物控制吧
donghc1993 2018-02-28
  • 打赏
  • 举报
回复
引用 1 楼 u011594442 的回复:
那你redis的执行正常吗?
redis有问题,但代码执行过程没有抛异常,我想知道的是后面执行的redis为什么会影响前面的删除文件操作
Sunyiban 2018-02-27
  • 打赏
  • 举报
回复
那你redis的执行正常吗?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧