Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Q
qk_backend
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
quanku
qk_backend
Commits
37283bda
Commit
37283bda
authored
Aug 21, 2023
by
shiyu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
redis配置
parent
e7f337bd
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
785 additions
and
0 deletions
+785
-0
ch-core/pom.xml
ch-core/pom.xml
+12
-0
ch-core/src/main/java/com/wwdz/ch/core/config/RedissonConfig.java
...src/main/java/com/wwdz/ch/core/config/RedissonConfig.java
+47
-0
ch-core/src/main/java/com/wwdz/ch/core/util/RedisUtils.java
ch-core/src/main/java/com/wwdz/ch/core/util/RedisUtils.java
+726
-0
No files found.
ch-core/pom.xml
View file @
37283bda
...
@@ -118,6 +118,18 @@
...
@@ -118,6 +118,18 @@
<artifactId>
spring-boot-starter-data-redis
</artifactId>
<artifactId>
spring-boot-starter-data-redis
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.springframework.data
</groupId>
<artifactId>
spring-data-redis
</artifactId>
<version>
2.1.5.RELEASE
</version>
</dependency>
<dependency>
<groupId>
org.redisson
</groupId>
<artifactId>
redisson
</artifactId>
<version>
3.11.3
</version>
</dependency>
<dependency>
<dependency>
<groupId>
org.apache.commons
</groupId>
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-pool2
</artifactId>
<artifactId>
commons-pool2
</artifactId>
...
...
ch-core/src/main/java/com/wwdz/ch/core/config/RedissonConfig.java
0 → 100644
View file @
37283bda
package
com.wwdz.ch.core.config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.redisson.Redisson
;
import
org.redisson.api.RedissonClient
;
import
org.redisson.config.Config
;
import
org.redisson.config.SingleServerConfig
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* redisson 配置类
* Created by xy on 2019/3/9.
*/
@Configuration
@Slf4j
public
class
RedissonConfig
{
Logger
logger
=
LoggerFactory
.
getLogger
(
RedissonConfig
.
class
);
@Value
(
"${spring.redis.host}"
)
private
String
host
;
@Value
(
"${spring.redis.port}"
)
private
String
port
;
@Value
(
"${spring.redis.password}"
)
private
String
password
;
@Bean
public
RedissonClient
getRedisson
(){
logger
.
info
(
"redis://"
+
host
+
":"
+
port
);
Config
config
=
new
Config
();
SingleServerConfig
singleServerConfig
=
config
.
useSingleServer
();
singleServerConfig
.
setAddress
(
"redis://"
+
host
+
":"
+
port
);
if
(
StringUtils
.
isNotEmpty
(
password
))
{
singleServerConfig
.
setPassword
(
password
);
}
return
Redisson
.
create
(
config
);
}
}
ch-core/src/main/java/com/wwdz/ch/core/util/RedisUtils.java
0 → 100644
View file @
37283bda
package
com.wwdz.ch.core.util
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Sets
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.data.redis.connection.RedisConnection
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.core.Cursor
;
import
org.springframework.data.redis.core.RedisConnectionUtils
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.ScanOptions
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
import
java.util.concurrent.TimeUnit
;
/**
*/
@Component
@SuppressWarnings
({
"unchecked"
,
"all"
})
public
class
RedisUtils
{
private
static
final
Logger
LOGGER
=
LoggerFactory
.
getLogger
(
RedisUtils
.
class
);
private
RedisTemplate
<
Object
,
Object
>
redisTemplate
;
public
RedisUtils
(
RedisTemplate
<
Object
,
Object
>
redisTemplate
)
{
this
.
redisTemplate
=
redisTemplate
;
this
.
redisTemplate
.
setHashKeySerializer
(
new
StringRedisSerializer
());
this
.
redisTemplate
.
setKeySerializer
(
new
StringRedisSerializer
());
this
.
redisTemplate
.
setStringSerializer
(
new
StringRedisSerializer
());
}
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
*/
public
boolean
expire
(
String
key
,
long
time
)
{
try
{
if
(
time
>
0
)
{
redisTemplate
.
expire
(
key
,
time
,
TimeUnit
.
SECONDS
);
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
return
true
;
}
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
* @param timeUnit 单位
*/
public
boolean
expire
(
String
key
,
long
time
,
TimeUnit
timeUnit
)
{
try
{
if
(
time
>
0
)
{
redisTemplate
.
expire
(
key
,
time
,
timeUnit
);
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
return
true
;
}
/**
* 根据 key 获取过期时间
*
* @param key 键 不能为null
* @return 时间(秒) 返回0代表为永久有效
*/
public
long
getExpire
(
Object
key
)
{
return
redisTemplate
.
getExpire
(
key
,
TimeUnit
.
SECONDS
);
}
/**
* 查找匹配key
*
* @param pattern key
* @return /
*/
public
List
<
String
>
scan
(
String
pattern
)
{
ScanOptions
options
=
ScanOptions
.
scanOptions
().
match
(
pattern
).
build
();
RedisConnectionFactory
factory
=
redisTemplate
.
getConnectionFactory
();
RedisConnection
rc
=
Objects
.
requireNonNull
(
factory
).
getConnection
();
Cursor
<
byte
[]>
cursor
=
rc
.
scan
(
options
);
List
<
String
>
result
=
new
ArrayList
<>();
while
(
cursor
.
hasNext
())
{
result
.
add
(
new
String
(
cursor
.
next
()));
}
try
{
RedisConnectionUtils
.
releaseConnection
(
rc
,
factory
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
}
return
result
;
}
/**
* 分页查询 key
*
* @param patternKey key
* @param page 页码
* @param size 每页数目
* @return /
*/
public
List
<
String
>
findKeysForPage
(
String
patternKey
,
int
page
,
int
size
)
{
ScanOptions
options
=
ScanOptions
.
scanOptions
().
match
(
patternKey
).
build
();
RedisConnectionFactory
factory
=
redisTemplate
.
getConnectionFactory
();
RedisConnection
rc
=
Objects
.
requireNonNull
(
factory
).
getConnection
();
Cursor
<
byte
[]>
cursor
=
rc
.
scan
(
options
);
List
<
String
>
result
=
new
ArrayList
<>(
size
);
int
tmpIndex
=
0
;
int
fromIndex
=
page
*
size
;
int
toIndex
=
page
*
size
+
size
;
while
(
cursor
.
hasNext
())
{
if
(
tmpIndex
>=
fromIndex
&&
tmpIndex
<
toIndex
)
{
result
.
add
(
new
String
(
cursor
.
next
()));
tmpIndex
++;
continue
;
}
// 获取到满足条件的数据后,就可以退出了
if
(
tmpIndex
>=
toIndex
)
{
break
;
}
tmpIndex
++;
cursor
.
next
();
}
try
{
RedisConnectionUtils
.
releaseConnection
(
rc
,
factory
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
}
return
result
;
}
/**
* 判断key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public
boolean
hasKey
(
String
key
)
{
try
{
return
redisTemplate
.
hasKey
(
key
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
public
void
del
(
String
...
keys
)
{
if
(
keys
!=
null
&&
keys
.
length
>
0
)
{
if
(
keys
.
length
==
1
)
{
boolean
result
=
redisTemplate
.
delete
(
keys
[
0
]);
LOGGER
.
debug
(
"--------------------------------------------"
);
LOGGER
.
debug
(
new
StringBuilder
(
"删除缓存:"
).
append
(
keys
[
0
]).
append
(
",结果:"
).
append
(
result
).
toString
());
LOGGER
.
debug
(
"--------------------------------------------"
);
}
else
{
Set
<
Object
>
keySet
=
new
HashSet
<>();
for
(
String
key
:
keys
)
{
if
(
redisTemplate
.
hasKey
(
key
))
keySet
.
add
(
key
);
}
long
count
=
redisTemplate
.
delete
(
keySet
);
LOGGER
.
debug
(
"--------------------------------------------"
);
LOGGER
.
debug
(
"成功删除缓存:"
+
keySet
.
toString
());
LOGGER
.
debug
(
"缓存删除数量:"
+
count
+
"个"
);
LOGGER
.
debug
(
"--------------------------------------------"
);
}
}
}
/**
* 删除缓存
*
* @param key 可以传一个值 或多个
*/
public
long
del
(
Collection
<
String
>
keys
)
{
if
(
CollectionUtils
.
isEmpty
(
keys
)){
return
0L
;
}
return
redisTemplate
.
delete
(
Sets
.
newHashSet
(
keys
));
}
public
boolean
delete
(
String
key
)
{
return
redisTemplate
.
delete
(
key
);
}
// ============================String=============================
/**
* 普通缓存获取
*
* @param key 键
* @return 值
*/
public
Object
get
(
String
key
)
{
return
key
==
null
?
null
:
redisTemplate
.
opsForValue
().
get
(
key
);
}
/**
* 批量获取
*
* @param keys
* @return
*/
public
List
<
Object
>
multiGet
(
List
<
String
>
keys
)
{
List
list
=
redisTemplate
.
opsForValue
().
multiGet
(
Sets
.
newHashSet
(
keys
));
List
resultList
=
Lists
.
newArrayList
();
Optional
.
ofNullable
(
list
).
ifPresent
(
e
->
list
.
forEach
(
ele
->
Optional
.
ofNullable
(
ele
).
ifPresent
(
resultList:
:
add
)));
return
resultList
;
}
/**
* 普通缓存放入
*
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public
boolean
set
(
String
key
,
Object
value
)
{
try
{
redisTemplate
.
opsForValue
().
set
(
key
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
* @return true成功 false 失败
*/
public
boolean
set
(
String
key
,
Object
value
,
long
time
)
{
try
{
if
(
time
>
0
)
{
redisTemplate
.
opsForValue
().
set
(
key
,
value
,
time
,
TimeUnit
.
SECONDS
);
}
else
{
set
(
key
,
value
);
}
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 普通缓存放入并设置时间
*
* @param key 键
* @param value 值
* @param time 时间
* @param timeUnit 类型
* @return true成功 false 失败
*/
public
boolean
set
(
String
key
,
Object
value
,
long
time
,
TimeUnit
timeUnit
)
{
try
{
if
(
time
>
0
)
{
redisTemplate
.
opsForValue
().
set
(
key
,
value
,
time
,
timeUnit
);
}
else
{
set
(
key
,
value
);
}
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
// ================================Map=================================
/**
* HashGet
*
* @param key 键 不能为null
* @param item 项 不能为null
* @return 值
*/
public
Object
hget
(
String
key
,
String
item
)
{
return
redisTemplate
.
opsForHash
().
get
(
key
,
item
);
}
/**
* 获取hashKey对应的所有键值
*
* @param key 键
* @return 对应的多个键值
*/
public
Map
<
Object
,
Object
>
hmget
(
String
key
)
{
return
redisTemplate
.
opsForHash
().
entries
(
key
);
}
/**
* HashSet
*
* @param key 键
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public
boolean
hmset
(
String
key
,
Map
<
String
,
Object
>
map
)
{
try
{
redisTemplate
.
opsForHash
().
putAll
(
key
,
map
);
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* HashSet 并设置时间
*
* @param key 键
* @param map 对应多个键值
* @param time 时间(秒)
* @return true成功 false失败
*/
public
boolean
hmset
(
String
key
,
Map
<
String
,
Object
>
map
,
long
time
)
{
try
{
redisTemplate
.
opsForHash
().
putAll
(
key
,
map
);
if
(
time
>
0
)
{
expire
(
key
,
time
);
}
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @return true 成功 false失败
*/
public
boolean
hset
(
String
key
,
String
item
,
Object
value
)
{
try
{
redisTemplate
.
opsForHash
().
put
(
key
,
item
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public
boolean
hset
(
String
key
,
String
item
,
Object
value
,
long
time
)
{
try
{
redisTemplate
.
opsForHash
().
put
(
key
,
item
,
value
);
if
(
time
>
0
)
{
expire
(
key
,
time
);
}
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 删除hash表中的值
*
* @param key 键 不能为null
* @param item 项 可以使多个 不能为null
*/
public
void
hdel
(
String
key
,
Object
...
item
)
{
redisTemplate
.
opsForHash
().
delete
(
key
,
item
);
}
/**
* 判断hash表中是否有该项的值
*
* @param key 键 不能为null
* @param item 项 不能为null
* @return true 存在 false不存在
*/
public
boolean
hHasKey
(
String
key
,
String
item
)
{
return
redisTemplate
.
opsForHash
().
hasKey
(
key
,
item
);
}
/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
*
* @param key 键
* @param item 项
* @param by 要增加几(大于0)
* @return
*/
public
double
hincr
(
String
key
,
String
item
,
double
by
)
{
return
redisTemplate
.
opsForHash
().
increment
(
key
,
item
,
by
);
}
/**
* hash递减
*
* @param key 键
* @param item 项
* @param by 要减少记(小于0)
* @return
*/
public
double
hdecr
(
String
key
,
String
item
,
double
by
)
{
return
redisTemplate
.
opsForHash
().
increment
(
key
,
item
,
-
by
);
}
// ============================set=============================
/**
* 根据key获取Set中的所有值
*
* @param key 键
* @return
*/
public
Set
<
Object
>
sGet
(
String
key
)
{
try
{
return
redisTemplate
.
opsForSet
().
members
(
key
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
null
;
}
}
/**
* 根据value从一个set中查询,是否存在
*
* @param key 键
* @param value 值
* @return true 存在 false不存在
*/
public
boolean
sHasKey
(
String
key
,
Object
value
)
{
try
{
return
redisTemplate
.
opsForSet
().
isMember
(
key
,
value
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 将数据放入set缓存
*
* @param key 键
* @param values 值 可以是多个
* @return 成功个数
*/
public
long
sSet
(
String
key
,
Object
...
values
)
{
try
{
return
redisTemplate
.
opsForSet
().
add
(
key
,
values
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
0
;
}
}
/**
* 将set数据放入缓存
*
* @param key 键
* @param time 时间(秒)
* @param values 值 可以是多个
* @return 成功个数
*/
public
long
sSetAndTime
(
String
key
,
long
time
,
Object
...
values
)
{
try
{
Long
count
=
redisTemplate
.
opsForSet
().
add
(
key
,
values
);
if
(
time
>
0
)
{
expire
(
key
,
time
);
}
return
count
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
0
;
}
}
/**
* 获取set缓存的长度
*
* @param key 键
* @return
*/
public
long
sGetSetSize
(
String
key
)
{
try
{
return
redisTemplate
.
opsForSet
().
size
(
key
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
0
;
}
}
/**
* 移除值为value的
*
* @param key 键
* @param values 值 可以是多个
* @return 移除的个数
*/
public
long
setRemove
(
String
key
,
Object
...
values
)
{
try
{
Long
count
=
redisTemplate
.
opsForSet
().
remove
(
key
,
values
);
return
count
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
0
;
}
}
// ===============================list=================================
/**
* 获取list缓存的内容
*
* @param key 键
* @param start 开始
* @param end 结束 0 到 -1代表所有值
* @return
*/
public
List
<
Object
>
lGet
(
String
key
,
long
start
,
long
end
)
{
try
{
return
redisTemplate
.
opsForList
().
range
(
key
,
start
,
end
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
null
;
}
}
/**
* 获取list缓存的长度
*
* @param key 键
* @return
*/
public
long
lGetListSize
(
String
key
)
{
try
{
return
redisTemplate
.
opsForList
().
size
(
key
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
0
;
}
}
/**
* 通过索引 获取list中的值
*
* @param key 键
* @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推
* @return
*/
public
Object
lGetIndex
(
String
key
,
long
index
)
{
try
{
return
redisTemplate
.
opsForList
().
index
(
key
,
index
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
null
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @return
*/
public
boolean
lSet
(
String
key
,
Object
value
)
{
try
{
redisTemplate
.
opsForList
().
rightPush
(
key
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return
*/
public
boolean
lSet
(
String
key
,
Object
value
,
long
time
)
{
try
{
redisTemplate
.
opsForList
().
rightPush
(
key
,
value
);
if
(
time
>
0
)
{
expire
(
key
,
time
);
}
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @return
*/
public
boolean
lSet
(
String
key
,
List
<
Object
>
value
)
{
try
{
redisTemplate
.
opsForList
().
rightPushAll
(
key
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 将list放入缓存
*
* @param key 键
* @param value 值
* @param time 时间(秒)
* @return
*/
public
boolean
lSet
(
String
key
,
List
<
Object
>
value
,
long
time
)
{
try
{
redisTemplate
.
opsForList
().
rightPushAll
(
key
,
value
);
if
(
time
>
0
)
{
expire
(
key
,
time
);
}
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 根据索引修改list中的某条数据
*
* @param key 键
* @param index 索引
* @param value 值
* @return /
*/
public
boolean
lUpdateIndex
(
String
key
,
long
index
,
Object
value
)
{
try
{
redisTemplate
.
opsForList
().
set
(
key
,
index
,
value
);
return
true
;
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
false
;
}
}
/**
* 移除N个值为value
*
* @param key 键
* @param count 移除多少个
* @param value 值
* @return 移除的个数
*/
public
long
lRemove
(
String
key
,
long
count
,
Object
value
)
{
try
{
return
redisTemplate
.
opsForList
().
remove
(
key
,
count
,
value
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
.
getMessage
(),
e
);
return
0
;
}
}
/**
* @param prefix 前缀
* @param ids id
*/
public
void
delByKeys
(
String
prefix
,
Set
<
Long
>
ids
)
{
Set
<
Object
>
keys
=
new
HashSet
<>();
for
(
Long
id
:
ids
)
{
keys
.
addAll
(
redisTemplate
.
keys
(
new
StringBuffer
(
prefix
).
append
(
id
).
toString
()));
}
long
count
=
redisTemplate
.
delete
(
keys
);
// 此处提示可自行删除
LOGGER
.
debug
(
"--------------------------------------------"
);
LOGGER
.
debug
(
"成功删除缓存:"
+
keys
.
toString
());
LOGGER
.
debug
(
"缓存删除数量:"
+
count
+
"个"
);
LOGGER
.
debug
(
"--------------------------------------------"
);
}
public
boolean
tryLock
(
String
key
,
String
value
,
long
time
)
{
return
redisTemplate
.
opsForValue
().
setIfAbsent
(
key
,
value
,
time
,
TimeUnit
.
SECONDS
);
}
public
void
unlock
(
String
key
,
String
value
)
{
if
(
hasKey
(
key
))
{
String
redisValue
=
get
(
key
).
toString
();
if
(
StringUtils
.
equals
(
value
,
redisValue
))
{
delete
(
key
);
}
}
}
}
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