记得上下班打卡 | git大法好,push需谨慎
Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liquidnet-bus-v1
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
董敬伟
liquidnet-bus-v1
Commits
21a02d58
Commit
21a02d58
authored
Nov 18, 2021
by
jiangxiulong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Lock test
parent
0b9660f9
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
63 additions
and
6 deletions
+63
-6
SweetConstant.java
...a/com/liquidnet/service/sweet/constant/SweetConstant.java
+1
-0
AbstractRedisUtil.java
....liquidnet.common.cache/redis/util/AbstractRedisUtil.java
+30
-4
JxlMathUtil.java
...weet/src/main/java/com/liquidnet/service/JxlMathUtil.java
+1
-0
SweetIntegralActivityDrawServiceImpl.java
...et/service/impl/SweetIntegralActivityDrawServiceImpl.java
+19
-2
RedisDataUtils.java
...ava/com/liquidnet/service/sweet/utils/RedisDataUtils.java
+12
-0
No files found.
liquidnet-bus-api/liquidnet-service-sweet-api/src/main/java/com/liquidnet/service/sweet/constant/SweetConstant.java
View file @
21a02d58
...
...
@@ -37,6 +37,7 @@ public class SweetConstant {
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_IN_USER
=
"sweet:integralActivity:DrawIn:activityId:"
;
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER_KEY
=
":userId:"
;
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_INFO
=
"sweet:integralActivity:DrawInfo:drawId:"
;
public
static
final
String
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_LOCK
=
"sweet:integralActivity:lock:userId:"
;
// 答题活动
public
final
static
String
REDIS_KEY_SWEET_ANSWER_PHONE
=
"sweet:answer:phone:"
;
// 城市投票活动
...
...
liquidnet-bus-common/liquidnet-common-cache/liquidnet-common-cache-redis/src/main/java/com.liquidnet.common.cache/redis/util/AbstractRedisUtil.java
View file @
21a02d58
...
...
@@ -25,6 +25,7 @@ public abstract class AbstractRedisUtil {
/**
* 设置redis数据源
*
* @return
*/
abstract
AbstractRedisConfig
getRedisConfig
();
...
...
@@ -32,7 +33,7 @@ public abstract class AbstractRedisUtil {
/**
* 获取redis队列
*/
public
StringRedisTemplate
getStringRedisTemplate
(){
public
StringRedisTemplate
getStringRedisTemplate
()
{
return
this
.
getRedisConfig
().
getStringRedisTemplate
();
}
...
...
@@ -764,6 +765,30 @@ public abstract class AbstractRedisUtil {
return
this
.
getRedisConfig
().
getRedisTemplateByDb
(
15
).
opsForSet
().
isMember
(
redisKey
,
item
);
}
/**
* 创建锁
* @param key 锁的Key
* @param value 值(随便写毫无意义)
* @param releaseTime 锁过期时间 防止死锁
* @return
*/
public
boolean
lock
(
String
key
,
int
value
,
long
releaseTime
)
{
// 尝试获取锁
RedisTemplate
<
String
,
Object
>
redisTemplate
=
this
.
getRedisConfig
().
getRedisTemplateByDb
(
this
.
getIndex
(
key
));
Boolean
boo
=
redisTemplate
.
opsForValue
().
setIfAbsent
(
key
,
value
,
releaseTime
,
TimeUnit
.
SECONDS
);
// 判断结果
return
boo
!=
null
&&
boo
;
}
/**
** 根据key删除锁
** @param key
*/
public
void
uLock
(
String
key
)
{
// 删除key即可释放锁
this
.
getRedisConfig
().
getRedisTemplateByDb
(
this
.
getIndex
(
key
)).
delete
(
key
);
}
public
static
void
main
(
String
[]
args
)
{
String
[]
keys
=
{
...
...
@@ -775,8 +800,9 @@ public abstract class AbstractRedisUtil {
System
.
out
.
printf
(
"\n[%s] - idx:%s"
,
key
,
idx
);
}
}
private
int
getIndex
(
String
key
){
return
MathUtil
.
getIndex
(
key
,
this
.
getRedisConfig
().
defaultDb
,
this
.
getRedisConfig
().
totalDbs
);
private
int
getIndex
(
String
key
)
{
return
MathUtil
.
getIndex
(
key
,
this
.
getRedisConfig
().
defaultDb
,
this
.
getRedisConfig
().
totalDbs
);
}
}
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/JxlMathUtil.java
View file @
21a02d58
...
...
@@ -50,6 +50,7 @@ public class JxlMathUtil {
// getIndex("kylin:performances:roadShowId:570");
// getIndex("kylin:order:refund:address");
// getIndex("basicServices:upushList:IOS");
getIndex
(
"jxl-lock-test"
);
// getIndex("basicServices:upushList:Android");
// getIndex("basicServices:zhengzaiAppVersionsAndroid");
// getIndex("basicServices:zhengzaiAppVersionsIos");
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/service/impl/SweetIntegralActivityDrawServiceImpl.java
View file @
21a02d58
...
...
@@ -25,6 +25,7 @@ import com.liquidnet.service.sweet.utils.RedisDataUtils;
import
com.liquidnet.service.sweet.utils.SweetNewObjectUtil
;
import
org.apache.commons.lang.StringUtils
;
import
org.bson.Document
;
import
org.redisson.api.RLock
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.PageRequest
;
import
org.springframework.data.domain.Pageable
;
...
...
@@ -67,7 +68,23 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
@Override
public
ResponseDto
<
SweetIntegralActivityPrizeVo
>
create
(
String
integralActivityId
)
{
// TODO: 2021/10/26 看情况是否加锁 一个用户整个逻辑单进程
Map
tokenClaims
=
CurrentUtil
.
getTokenClaims
();
boolean
isLock
=
redisDataUtils
.
setIntegralDrawLock
(
"1111"
);
if
(!
isLock
)
{
return
ResponseDto
.
failure
(
"太快了"
);
}
else
{
try
{
System
.
out
.
println
(
"获取锁成功,开始执行逻辑"
);
Thread
.
sleep
(
2000
);
return
ResponseDto
.
success
();
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"程序执行异常{}"
);
return
ResponseDto
.
failure
(
"异常了"
);
}
finally
{
redisDataUtils
.
delIntegralDrawLock
(
"1111"
);
System
.
out
.
println
(
"执行完毕。释放锁完成;"
);
}
}
/*Map tokenClaims = CurrentUtil.getTokenClaims();
String userId = StringUtils.defaultString((String.valueOf(tokenClaims.get("sub"))), "");
String nickname = StringUtils.defaultString((String.valueOf(tokenClaims.get("nickname"))), "");
...
...
@@ -179,7 +196,7 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
queueUtils.sendMsgByRedis(MQConst.SweetQueue.SWEET_INTEGRAL_ACTIVITY_DRAW.getKey(),
SqlMapping.gets(sqls, sqlsDataA));
return
ResponseDto
.
success
(
sweetIntegralActivityPrizeVo
);
return ResponseDto.success(sweetIntegralActivityPrizeVo);
*/
}
@Override
...
...
liquidnet-bus-service/liquidnet-service-sweet/src/main/java/com/liquidnet/service/sweet/utils/RedisDataUtils.java
View file @
21a02d58
...
...
@@ -748,4 +748,16 @@ public class RedisDataUtils {
.
concat
(
drawId
);
redisUtil
.
set
(
redisKeyDraw
,
drawVo
);
}
public
boolean
setIntegralDrawLock
(
String
userId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_LOCK
.
concat
(
userId
);
return
redisUtil
.
lock
(
redisKey
,
1
,
60
);
}
public
void
delIntegralDrawLock
(
String
userId
)
{
String
redisKey
=
SweetConstant
.
REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_LOCK
.
concat
(
userId
);
redisUtil
.
uLock
(
redisKey
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment