通过缓存来使得代码执行一次(防止重复操作)
2017-11-06 09:56
661 查看
public class OnceExecutor { private CacheService cacheService; public OnceExecutor(CacheService cacheService) { this.cacheService = cacheService; } /** * 通过缓存记录键来支持只允许一次 * * @param type * @param id * @param callable * @param <T> * @return * @throws Exception */ public <T> T runOnce(String type, String id, Callable<T> callable) throws Exception { String key = Constants.REDIS_KEY_PREFIX_WORK + "_" + type + "_" + id; String value = cacheService.getString(key); boolean handled = "true".equals(value); if (!handled) { T ret = null; try { cacheService.setString(key, "true", 5, TimeUnit.MINUTES); ret = callable.call(); cacheService.setString(key, "true",5, TimeUnit.MINUTES); } catch (Exception e) { cacheService.del(key); } return ret; } return null; } }
private OnceExecutor onceExecutor; @Autowired public WorkManager(CacheService cacheService) { onceExecutor = new OnceExecutor(cacheService); } public void updateForStudentHandIn(StudentWork studentWork, Work work) throws Exception { onceExecutor.runOnce("handIn", studentWork.getStudentWorkId(), () -> { .... return null; }); }
相关文章推荐
- php原子性操作测试,有效防止多进程对同一段代码的重复执行
- Java通过缓存队列执行任务代码实现
- ASP.NET中防止页面刷新造成表单重复提交执行两次操作
- Java线程重复执行以及操作共享变量的代码示例
- 给服务器控件添加前台js验证,使得通过了前台js验证才执行相应的服务器端操作(OnClientClick)
- 防止shell脚本重复执行的代码
- SQL Server 第四堂课,创建存储过程。存储过程是一组编译在单个执行计划中的transact-SQL语句。存储过程相当于C#函数,可以允许模块化程序设计,允许更快执行如果某操作需要大量transct-SQL代码或需要重复执行,将在创建存储过程中对其进行分析和优化。
- php进程管理--手动创建进程锁,防止重复执行某程序代码
- android 一定间隔时间后执行操作,如防止重复点击、5s后弹出对话框
- 防止shell脚本重复执行的代码
- 您希望通过将所有ArrayList对象替换为相应的泛型版本以提高应用程序的效率,并使得代码更易于使用。当结构体或其他值类型存储在这些数据结构中时,会导致装箱/拆箱操作,这时就需要这么做。
- ASP.NET中防止页面刷新造成表单重复提交执行两次操作
- 更新操作如何防止带外键的字段出现重复,代码实现方法
- .net 防止页面刷新重复提交(表单提交后保留上一次数据缓存,刷新提交)
- volatile变量在多线程同步时运用的优点: 1、锁一次只允许一个线程访问值,volatile 允许多个线程执行读操作,因此当使用 volatile 保证读代码路径时,要比使用锁执行全部代码路径获得
- 服务器代码未执行完,接口返回501错误,导致通过开放平台的微博经常重复
- 表单中通过sql语句,一次操作,执行多个sql,返回多个值的方法
- 通过继承消除重复代码的简单示例
- VS2008:无法执行添加/移除操作,因为代码元素是只读的……
- Windows Azure Marketplace入门教学-通过代码操作DataMarket数据源