redis锁
2021/12/13 19:17:20
本文主要是介绍redis锁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.锁代码
private boolean first(String key) { return redisUtils.setIfAbsent(key, "syn", 30, TimeUnit.SECONDS); } private Object syn(String synKey, RedisSynHandle handle) { boolean first = false; try { first = first(synKey); if (first) { return handle.handle(); } else { throw new StandardException("请求频繁"); } } finally { if (first) { finalEnd(synKey); } } } private void finalEnd(String key) { if (StringUtils.isNotBlank(key)) { redisUtils.del(key); } } public interface RedisSynHandle { //业务处理 Object handle(); }
/** * 保存 若key已存在返回false,反之返回true */ public boolean setIfAbsent(String key, String value) { logger.debug("Redis setIfAbsent key:{},value:{}", key, value); Boolean result = redisTemplate.opsForValue().setIfAbsent(key, value); return result != null && result; } /** * 保存 若key已存在返回false,反之返回true 同时设置有效时间 */ public boolean setIfAbsent(String key, String value, long time, TimeUnit timeUnit) { logger.debug("Redis setIfAbsent key:{},value:{},time:{},timeUnit:{}", key, value, time, timeUnit); try { return setIfAbsent(key, value); }finally { redisTemplate.boundValueOps(key).expire(time, timeUnit); } }
2.使用
@Override @Transactional(rollbackFor = Throwable.class) public Object refund(Xxx xxx) { return syn("xxx:xxx:xxx:refund:" + xxx.getId,()-> { }); }
这篇关于redis锁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-26阿里云Redis项目实战:新手入门教程
- 2024-09-26阿里云Redis资料入门教程
- 2024-09-25阿里云Redis入门教程:快速掌握Redis的基本操作
- 2024-09-25阿里云Redis学习:新手入门教程
- 2024-09-21Redis资料入门教程:轻松掌握Redis基础知识
- 2024-09-21Redis资料:入门级用户必学教程
- 2024-09-21Redis资料:新手入门教程与实践指南
- 2024-09-20Redis教程:从入门到实践的全面指南
- 2024-09-20Redis教程:初学者快速入门指南
- 2024-09-20Redis教程:新手入门与实践指南