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-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识