记得上下班打卡 | 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
ea45e5ae
Commit
ea45e5ae
authored
Aug 12, 2021
by
anjiabin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
实现redis分库工具类
parent
bdf00ef1
Changes
5
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
276 additions
and
101 deletions
+276
-101
RedisCacheConfig.java
...liquidnet.common.cache/redis/config/RedisCacheConfig.java
+0
-45
RedisConfig.java
.../com.liquidnet.common.cache/redis/config/RedisConfig.java
+172
-0
MathUtil.java
.../java/com.liquidnet.common.cache/redis/util/MathUtil.java
+44
-0
RedisUtil.java
...java/com.liquidnet.common.cache/redis/util/RedisUtil.java
+57
-56
liquidnet-service-dragon.yml
...-bus-config/liquidnet-config/liquidnet-service-dragon.yml
+3
-0
No files found.
liquidnet-bus-common/liquidnet-common-cache/liquidnet-common-cache-redis/src/main/java/com.liquidnet.common.cache/redis/config/RedisCacheConfig.java
deleted
100644 → 0
View file @
bdf00ef1
package
com
.
liquidnet
.
common
.
cache
.
redis
.
config
;
import
com.fasterxml.jackson.annotation.JsonAutoDetect
;
import
com.fasterxml.jackson.annotation.PropertyAccessor
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.SerializationFeature
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
/**
* Created by Administrator on 2017/2/8.
*/
@Configuration
public
class
RedisCacheConfig
{
@Bean
public
RedisTemplate
<
String
,
Object
>
redisTemplate
(
RedisConnectionFactory
factory
)
{
RedisTemplate
<
String
,
Object
>
redisTemplate
=
new
RedisTemplate
<
String
,
Object
>();
redisTemplate
.
setConnectionFactory
(
factory
);
Jackson2JsonRedisSerializer
j2jrs
=
new
Jackson2JsonRedisSerializer
(
Object
.
class
);
ObjectMapper
om
=
new
ObjectMapper
();
om
.
setVisibility
(
PropertyAccessor
.
ALL
,
JsonAutoDetect
.
Visibility
.
ANY
);
om
.
disable
(
SerializationFeature
.
WRITE_DATES_AS_TIMESTAMPS
);
om
.
registerModule
(
new
JavaTimeModule
());
om
.
activateDefaultTyping
(
om
.
getPolymorphicTypeValidator
(),
ObjectMapper
.
DefaultTyping
.
NON_FINAL
);
j2jrs
.
setObjectMapper
(
om
);
StringRedisSerializer
stringRedisSerializer
=
new
StringRedisSerializer
();
// key采用String的序列化方式
redisTemplate
.
setKeySerializer
(
stringRedisSerializer
);
// hash的key也采用String的序列化方式
redisTemplate
.
setHashKeySerializer
(
stringRedisSerializer
);
// value序列化方式采用jackson
redisTemplate
.
setValueSerializer
(
j2jrs
);
// hash的value序列化方式采用jackson
redisTemplate
.
setHashValueSerializer
(
j2jrs
);
redisTemplate
.
afterPropertiesSet
();
return
redisTemplate
;
}
}
liquidnet-bus-common/liquidnet-common-cache/liquidnet-common-cache-redis/src/main/java/com.liquidnet.common.cache/redis/config/RedisConfig.java
0 → 100644
View file @
ea45e5ae
package
com
.
liquidnet
.
common
.
cache
.
redis
.
config
;
//package com.liquidnet.common.cache.redis.config;
import
com.fasterxml.jackson.annotation.JsonAutoDetect
;
import
com.fasterxml.jackson.annotation.PropertyAccessor
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.fasterxml.jackson.databind.SerializationFeature
;
import
com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.pool2.impl.GenericObjectPoolConfig
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.connection.RedisStandaloneConfiguration
;
import
org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration
;
import
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
;
import
org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
;
import
org.springframework.data.redis.serializer.StringRedisSerializer
;
import
javax.annotation.PostConstruct
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: RedisConfig
* @Package com.liquidnet.common.cache.redis.config
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/8/10 16:28
*/
@Slf4j
@Configuration
public
class
RedisConfig
{
@Value
(
"${spring.redis.host}"
)
private
String
host
;
@Value
(
"${spring.redis.port}"
)
private
int
port
;
@Value
(
"${spring.redis.password}"
)
private
String
password
;
@Value
(
"${spring.redis.lettuce.pool.max-active}"
)
private
int
maxActive
;
@Value
(
"${spring.redis.lettuce.pool.max-idle}"
)
private
int
maxIdle
;
@Value
(
"${spring.redis.lettuce.pool.min-idle}"
)
private
int
minIdle
;
@Value
(
"${spring.redis.lettuce.pool.max-wait}"
)
private
int
maxWait
;
public
static
int
defaultDb
=
0
;
public
static
int
totalDbs
=
1
;
@Value
(
"${spring.redis.dbs:${spring.redis.database}}"
)
private
List
<
Integer
>
dbs
;
public
static
Map
<
Integer
,
RedisTemplate
<
String
,
Object
>>
redisTemplateMap
=
new
HashMap
<>();
@PostConstruct
public
void
initRedisTemp
()
throws
Exception
{
log
.
info
(
"###### START 初始化 Redis 连接池 START ######"
);
defaultDb
=
dbs
.
get
(
0
);
if
(
dbs
.
size
()==
2
&&
dbs
.
get
(
1
)!=
null
){
totalDbs
=
dbs
.
get
(
1
);
log
.
info
(
"init totalDbs : {}"
,
totalDbs
);
for
(
int
i
=
0
;
i
<
totalDbs
;
i
++)
{
log
.
info
(
"###### 正在加载Redis-db-"
+
i
+
" ######"
);
redisTemplateMap
.
put
(
i
,
getRedisTemplate
(
i
));
}
}
else
{
log
.
info
(
"init defaultDb : {}"
,
defaultDb
);
redisTemplateMap
.
put
(
defaultDb
,
getRedisTemplate
(
defaultDb
));
}
log
.
info
(
"###### END 初始化 Redis 连接池 END ######"
);
}
private
RedisTemplate
<
String
,
Object
>
getRedisTemplate
(
int
dbNo
)
{
return
getRedisTemplate
(
getDbFactory
(
dbNo
));
}
private
LettuceConnectionFactory
getDbFactory
(
int
dbNo
){
LettuceConnectionFactory
factory
=
new
LettuceConnectionFactory
(
getRedisConfig
(
dbNo
),
getClientConfig
());
factory
.
afterPropertiesSet
();
//必须初始化实例
return
factory
;
}
private
RedisStandaloneConfiguration
getRedisConfig
(
int
dbNo
)
{
RedisStandaloneConfiguration
config
=
new
RedisStandaloneConfiguration
();
config
.
setHostName
(
host
);
config
.
setPort
(
port
);
config
.
setPassword
(
password
);
config
.
setDatabase
(
dbNo
);
return
config
;
}
private
LettuceClientConfiguration
getClientConfig
()
{
GenericObjectPoolConfig
poolConfig
=
new
GenericObjectPoolConfig
();
poolConfig
.
setMaxTotal
(
maxActive
);
poolConfig
.
setMaxIdle
(
maxIdle
);
poolConfig
.
setMinIdle
(
minIdle
);
poolConfig
.
setMaxWaitMillis
(
maxWait
);
return
LettucePoolingClientConfiguration
.
builder
().
poolConfig
(
poolConfig
).
build
();
}
private
RedisTemplate
<
String
,
Object
>
getRedisTemplate
(
LettuceConnectionFactory
factory
)
{
RedisTemplate
<
String
,
Object
>
redisTemplate
=
new
RedisTemplate
<>();
redisTemplate
.
setConnectionFactory
(
factory
);
setSerializer
(
redisTemplate
);
redisTemplate
.
afterPropertiesSet
();
return
redisTemplate
;
}
public
RedisTemplate
<
String
,
Object
>
getRedisTemplateByDb
(
int
db
){
return
redisTemplateMap
.
get
(
db
);
}
@Bean
public
RedisTemplate
redisTemplate
()
{
LettuceConnectionFactory
factory
=
null
;
if
(
totalDbs
==
1
){
factory
=
getDbFactory
(
defaultDb
);
}
else
{
factory
=
getDbFactory
(
totalDbs
-
1
);
}
RedisTemplate
<
String
,
Object
>
redisTemplate
=
new
RedisTemplate
<>();
redisTemplate
.
setConnectionFactory
(
factory
);
setSerializer
(
redisTemplate
);
redisTemplate
.
afterPropertiesSet
();
return
redisTemplate
;
}
@Bean
public
StringRedisTemplate
stringRedisTemplate
()
{
LettuceConnectionFactory
factory
=
null
;
if
(
totalDbs
==
1
){
factory
=
getDbFactory
(
defaultDb
);
}
else
{
factory
=
getDbFactory
(
totalDbs
-
1
);
}
StringRedisTemplate
redisTemplate
=
new
StringRedisTemplate
();
redisTemplate
.
setConnectionFactory
(
factory
);
return
redisTemplate
;
}
private
void
setSerializer
(
RedisTemplate
<
String
,
Object
>
template
)
{
Jackson2JsonRedisSerializer
j2jrs
=
new
Jackson2JsonRedisSerializer
(
Object
.
class
);
ObjectMapper
om
=
new
ObjectMapper
();
om
.
setVisibility
(
PropertyAccessor
.
ALL
,
JsonAutoDetect
.
Visibility
.
ANY
);
om
.
disable
(
SerializationFeature
.
WRITE_DATES_AS_TIMESTAMPS
);
om
.
registerModule
(
new
JavaTimeModule
());
om
.
activateDefaultTyping
(
om
.
getPolymorphicTypeValidator
(),
ObjectMapper
.
DefaultTyping
.
NON_FINAL
);
j2jrs
.
setObjectMapper
(
om
);
StringRedisSerializer
stringRedisSerializer
=
new
StringRedisSerializer
();
// key采用String的序列化方式
template
.
setKeySerializer
(
stringRedisSerializer
);
// hash的key也采用String的序列化方式
template
.
setHashKeySerializer
(
stringRedisSerializer
);
// value序列化方式采用jackson
template
.
setValueSerializer
(
j2jrs
);
// hash的value序列化方式采用jackson
template
.
setHashValueSerializer
(
j2jrs
);
template
.
afterPropertiesSet
();
}
}
\ No newline at end of file
liquidnet-bus-common/liquidnet-common-cache/liquidnet-common-cache-redis/src/main/java/com.liquidnet.common.cache/redis/util/MathUtil.java
0 → 100644
View file @
ea45e5ae
package
com
.
liquidnet
.
common
.
cache
.
redis
.
util
;
import
com.liquidnet.common.cache.redis.config.RedisConfig
;
import
lombok.extern.slf4j.Slf4j
;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: MathUtil
* @Package com.liquidnet.common.cache.redis.util
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/8/10 18:03
*/
@Slf4j
public
class
MathUtil
{
public
static
int
getIndex
(
String
key
){
log
.
info
(
"MathUtil.getIndex key:{} hashcode:{}"
,
key
,
key
.
hashCode
());
int
defaultDb
=
RedisConfig
.
defaultDb
;
int
totalDbs
=
RedisConfig
.
totalDbs
;
if
(
totalDbs
==
1
){
log
.
info
(
"only one db : {} "
,
defaultDb
);
return
defaultDb
;
}
int
mod
=
250
;
if
(
totalDbs
>
1
&&
totalDbs
<
256
){
if
(
totalDbs
==
16
){
mod
=
15
;
}
else
{
mod
=
totalDbs
-
1
;
}
}
long
value
=
Long
.
valueOf
(
key
.
hashCode
());
int
hash
=(
int
)(
value
^
(
value
>>>
32
));
int
index
=
hash
%
mod
;
log
.
info
(
"MathUtil.getIndex key:{} index:{}"
,
key
,
index
);
return
index
;
}
public
static
void
main
(
String
[]
args
)
{
RedisConfig
redisConfig
=
new
RedisConfig
();
redisConfig
.
getRedisTemplateByDb
(
MathUtil
.
getIndex
(
"1"
));
}
}
liquidnet-bus-common/liquidnet-common-cache/liquidnet-common-cache-redis/src/main/java/com.liquidnet.common.cache/redis/util/RedisUtil.java
View file @
ea45e5ae
This diff is collapsed.
Click to expand it.
liquidnet-bus-config/liquidnet-config/liquidnet-service-dragon.yml
View file @
ea45e5ae
...
@@ -75,6 +75,9 @@ spring:
...
@@ -75,6 +75,9 @@ spring:
-
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
-
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
redis
:
redis
:
database
:
0
database
:
0
#如果配置了dbs,则database配置失效 格式为0,16 0为分库初始索引(目前只支持从0开始),16为redis总的db数,队列会自动创建在db15
#如果配置了dbs为具体dbNo 如:0 则作用同database配置一样
# dbs: 0
port
:
${liquidnet.redis.dragon.port}
port
:
${liquidnet.redis.dragon.port}
host
:
${liquidnet.redis.dragon.host}
host
:
${liquidnet.redis.dragon.host}
password
:
${liquidnet.redis.dragon.password}
password
:
${liquidnet.redis.dragon.password}
...
...
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