Toggle navigation
Toggle navigation
This project
Loading...
Sign in
yangyoupeng
/
microservice
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
yangyoupeng
2016-11-11 20:40:28 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
7874b8cacad60c6e6c0b7a6ce996fff78a49ea22
7874b8ca
1 parent
716e4bd5
防止重复提交的而判断
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
86 additions
and
8 deletions
src/microservice-parent/microservice-redis/src/main/java/com/zhaoonline/redis/lock/ExcludeLock.java
src/microservice-parent/microservice-redis/src/main/java/com/zhaoonline/redis/token/MultiSubmitTokenBeanConfig.java
src/microservice-parent/microservice-redis/src/main/java/com/zhaoonline/redis/token/Token.java
src/microservice-parent/microservice-redis/src/test/java/com/zhaoonline/redis/token/TestMultiSubmitToken.java
src/microservice-parent/microservice-redis/src/main/java/com/zhaoonline/redis/lock/ExcludeLock.java
View file @
7874b8c
...
...
@@ -89,8 +89,8 @@ public class ExcludeLock {
BoundValueOperations
<
String
,
String
>
valuOper
=
redisTemplate
.
boundValueOps
(
lockKeyPath
);
while
(
timeout
>=
0
)
{
final
Lock
newLock
=
asLock
(
System
.
currentTimeMillis
()
+
lockExpiryInMillis
);
valuOper
.
expire
(
lockExpiryInMillis
,
TimeUnit
.
MILLISECONDS
);
Boolean
result
=
valuOper
.
setIfAbsent
(
newLock
.
toString
());
valuOper
.
expire
(
lockExpiryInMillis
,
TimeUnit
.
MILLISECONDS
);
if
(
result
)
{
this
.
lock
=
newLock
;
return
true
;
...
...
src/microservice-parent/microservice-redis/src/main/java/com/zhaoonline/redis/token/MultiSubmitTokenBeanConfig.java
0 → 100644
View file @
7874b8c
package
com
.
zhaoonline
.
redis
.
token
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
com.zhaoonline.redis.template.RedisTemplateFactory
;
@Configuration
public
class
MultiSubmitTokenBeanConfig
{
@Bean
public
Token
<
Long
>
token
(
RedisTemplateFactory
factory
){
Token
<
Long
>
token
=
new
Token
<
Long
>(
factory
);
return
token
;
}
@Bean
public
MultiSubmitToken
multiSubmitToken
(
Token
<
Long
>
token
){
MultiSubmitToken
mulitSubmitToken
=
new
MultiSubmitToken
(
token
);
return
mulitSubmitToken
;
}
}
src/microservice-parent/microservice-redis/src/main/java/com/zhaoonline/redis/token/Token.java
View file @
7874b8c
...
...
@@ -22,18 +22,21 @@ public class Token<T> {
private
final
int
tokenExpiryInMillis
;
private
final
static
String
defaultTokenNameSpace
=
"token:"
;
private
String
tokenNameSpace
;
private
static
final
int
ONE_SECOND
=
1000
;
public
static
final
int
DEFAULT_EXPIRY_TIME_MILLIS
=
Integer
.
getInteger
(
"com.zhaoonline.redis.token.expiry.millis"
,
60
*
ONE_SECOND
);
public
static
final
int
DEFAULT_ACQUIRY_RESOLUTION_MILLIS
=
Integer
.
getInteger
(
"com.zhaoonline.redis.token.acquiry.resolution.millis"
,
100
);
500
);
//
public static final int DEFAULT_ACQUIRY_RESOLUTION_MILLIS = Integer
//
.getInteger("com.zhaoonline.redis.token.acquiry.resolution.millis", 100);
private
RedisTemplate
<
String
,
T
>
redisTemplate
;
public
Token
(
RedisTemplateFactory
factory
){
this
(
factory
,
DEFAULT_EXPIRY_TIME_MILLIS
,
defaultTokenNameSpace
);
this
(
factory
,
DEFAULT_EXPIRY_TIME_MILLIS
);
}
public
Token
(
RedisTemplateFactory
factory
,
int
expiryTimeMillis
){
this
(
factory
,
expiryTimeMillis
,
defaultTokenNameSpace
,
new
SafeEncodeSerializer
(),
new
GenericJackson2JsonRedisSerializer
()
);
}
public
Token
(
RedisTemplateFactory
factory
,
int
expiryTimeMillis
,
String
tokenNameSpace
){
this
(
factory
,
expiryTimeMillis
,
defaultTokenNameSpace
,
new
SafeEncodeSerializer
(),
new
GenericJackson2JsonRedisSerializer
()
);
}
...
...
@@ -49,11 +52,10 @@ public class Token<T> {
this
.
tokenNameSpace
=
tokenNameSpace
;
}
public
boolean
addToken
(
String
key
,
T
token
){
BoundValueOperations
<
String
,
T
>
valuOper
=
redisTemplate
.
boundValueOps
(
buildTokenKeyWithNameSpace
(
key
));
valuOper
.
expire
(
getTokenExpiryInMillis
(),
TimeUnit
.
MILLISECONDS
);
boolean
result
=
valuOper
.
setIfAbsent
(
token
);
valuOper
.
expire
(
getTokenExpiryInMillis
(),
TimeUnit
.
MILLISECONDS
);
return
result
;
}
private
String
buildTokenKeyWithNameSpace
(
String
key
){
...
...
src/microservice-parent/microservice-redis/src/test/java/com/zhaoonline/redis/token/TestMultiSubmitToken.java
View file @
7874b8c
...
...
@@ -32,4 +32,59 @@ public class TestMultiSubmitToken extends RepositoryCommonBase {
submitToken
.
deleteSubmitToken
(
testTokenName
);
}
@Test
public
void
testMultiSubmit
()
throws
InterruptedException
{
Token
<
Long
>
timestampToken
=
new
Token
<
Long
>(
factory
,
200
);
String
testTokenName
=
"tokentest1"
;
MultiSubmitToken
submitToken
=
new
MultiSubmitToken
(
timestampToken
);
submitToken
.
deleteSubmitToken
(
testTokenName
);
boolean
addResult
=
submitToken
.
addSubmitToken
(
testTokenName
,
1L
);
assertTrue
(
addResult
);
Thread
.
sleep
(
50
);
addResult
=
submitToken
.
addSubmitToken
(
testTokenName
,
2L
);
assertTrue
(
addResult
);
Long
value
=
submitToken
.
getSubmmitToken
(
testTokenName
);
assertEquals
(
new
Long
(
2
),
value
);
submitToken
.
deleteSubmitToken
(
testTokenName
);
}
@Test
public
void
testNotDelete
()
throws
InterruptedException
{
Token
<
Long
>
timestampToken
=
new
Token
<
Long
>(
factory
,
200
);
String
testTokenName
=
"tokentest1"
;
MultiSubmitToken
submitToken
=
new
MultiSubmitToken
(
timestampToken
);
submitToken
.
deleteSubmitToken
(
testTokenName
);
boolean
addResult
=
submitToken
.
addSubmitToken
(
testTokenName
,
1L
);
assertTrue
(
addResult
);
Thread
.
sleep
(
100
);
Long
value
=
submitToken
.
getSubmmitToken
(
testTokenName
);
assertNull
(
value
);
}
}
...
...
Please
register
or
login
to post a comment