1、引入POM包
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-amqp
</artifactId
>
</dependency
>
<dependency>
<groupId>org
.springframework
.boot
</groupId
>
<artifactId>spring
-boot
-starter
-data
-redis
</artifactId
>
</dependency
>
<dependency>
<groupId>redis
.clients
</groupId
>
<artifactId>jedis
</artifactId
>
</dependency
>
2、yml中添加连接信息
spring:
redis:
database: 0
host: 127.0.0.1
port: 6379
password:
timeout: 6000
pool:
max-active: 1000
max-wait: -1
max-idle: 10
min-idle: 5
order:
host: 127.0.0.1
port: 6379
password:
database: 1
3、增加Redis连接工厂
package com
.tyteam
.base
.config
;
import org
.apache
.commons
.lang
.StringUtils
;
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
.RedisConnectionFactory
;
import org
.springframework
.data
.redis
.connection
.jedis
.JedisConnectionFactory
;
import org
.springframework
.data
.redis
.core
.RedisTemplate
;
import org
.springframework
.data
.redis
.serializer
.Jackson2JsonRedisSerializer
;
import org
.springframework
.data
.redis
.serializer
.StringRedisSerializer
;
import com
.fasterxml
.jackson
.annotation
.JsonAutoDetect
;
import com
.fasterxml
.jackson
.annotation
.PropertyAccessor
;
import com
.fasterxml
.jackson
.databind
.ObjectMapper
;
import redis
.clients
.jedis
.JedisPoolConfig
;
@Configuration
public class RedisConfig {
@Value("${spring.redis.order.host}")
private String orderHost
;
@Value("${spring.redis.order.port}")
private String orderPort
;
@Value("${spring.redis.order.password}")
private String orderPassword
;
@Value("${spring.redis.order.database}")
private Integer orderDatabase
;
private static final int MAX_IDLE
= 200;
private static final int MAX_TOTAL
= 1024;
private static final long MAX_WAIT_MILLIS
= 10000;
public RedisConnectionFactory
connectionFactory(String host
, int port
, String password
, int maxIdle
,
int maxTotal
, long maxWaitMillis
, int index
) {
JedisConnectionFactory jedisConnectionFactory
= new JedisConnectionFactory();
jedisConnectionFactory
.setHostName(host
);
jedisConnectionFactory
.setPort(port
);
if (!StringUtils
.isEmpty(password
)) {
jedisConnectionFactory
.setPassword(password
);
}
if (index
!= 0) {
jedisConnectionFactory
.setDatabase(index
);
}
jedisConnectionFactory
.setPoolConfig(poolConfig(maxIdle
, maxTotal
, maxWaitMillis
, false));
jedisConnectionFactory
.afterPropertiesSet();
return jedisConnectionFactory
;
}
public JedisPoolConfig
poolConfig(int maxIdle
, int maxTotal
, long maxWaitMillis
, boolean testOnBorrow
) {
JedisPoolConfig poolConfig
= new JedisPoolConfig();
poolConfig
.setMaxIdle(maxIdle
);
poolConfig
.setMaxTotal(maxTotal
);
poolConfig
.setMaxWaitMillis(maxWaitMillis
);
poolConfig
.setTestOnBorrow(testOnBorrow
);
return poolConfig
;
}
@Bean(name
= "orderRedisTemplate")
public RedisTemplate
<String, Object> redisOrderTemplate()
{
RedisTemplate
<String, Object> template
= new RedisTemplate<String, Object>();
template
.setConnectionFactory(
connectionFactory(orderHost
, Integer
.parseInt(orderPort
), orderPassword
, MAX_IDLE
, MAX_TOTAL
, MAX_WAIT_MILLIS
, orderDatabase
));
Jackson2JsonRedisSerializer jacksonSeial
= new Jackson2JsonRedisSerializer(Object
.class);
ObjectMapper om
= new ObjectMapper();
om
.setVisibility(PropertyAccessor
.ALL
, JsonAutoDetect
.Visibility
.ANY
);
om
.enableDefaultTyping(ObjectMapper
.DefaultTyping
.NON_FINAL
);
jacksonSeial
.setObjectMapper(om
);
template
.setValueSerializer(jacksonSeial
);
template
.setKeySerializer(new StringRedisSerializer());
template
.setHashKeySerializer(new StringRedisSerializer());
template
.setHashValueSerializer(jacksonSeial
);
template
.afterPropertiesSet();
return template
;
}
}
4、使用2个Redis进行操作
我们在设置session时使用了2个Redis分别存储在了数据库1和数据库2上。
package com
.kingteam
.session
;
import java
.util
.UUID
;
import java
.util
.concurrent
.TimeUnit
;
import javax
.annotation
.Resource
;
import org
.springframework
.beans
.factory
.annotation
.Autowired
;
import org
.springframework
.beans
.factory
.annotation
.Qualifier
;
import org
.springframework
.data
.redis
.core
.RedisTemplate
;
import org
.springframework
.stereotype
.Service
;
@Service
public class KtSessionService {
@Autowired
@Qualifier("redisTemplate")
protected RedisTemplate
<String, Object> redisTemplate
;
@Autowired
@Resource(name
= "orderRedisTemplate")
RedisTemplate
<String, Object> orderRedisTemplate
;
public static final long sessionExpires
= 60*60*24*30;
public enum SessionStatus
{
NoToken
,
};
public Session
setSession(Session session
)
{
String token
= UUID
.randomUUID().toString();
session
.setToken(token
);
redisTemplate
.opsForValue().set(
token
,
session
,
sessionExpires
,
TimeUnit
.SECONDS
);
orderRedisTemplate
.opsForValue().set(token
,
session
,
sessionExpires
,
TimeUnit
.SECONDS
);
return session
;
}
public void removeSession(String token
)
{
redisTemplate
.delete(token
);
}
public Session
getSession(String token
)
{
return (Session
) redisTemplate
.opsForValue().get(token
);
}
public void refreshToken(String token
)
{
if(token
== null
|| token
.length()!= 36) return;
try {
redisTemplate
.expire(token
,sessionExpires
,TimeUnit
.SECONDS
);
} catch (Exception e
) {
e
.printStackTrace();
}
}
}
5、实操效果
我们在Reids中看到了2条一样的数据,存储成功。
6、如何驱动更多张数据表
在yml文件中配置其他想写入的表
在如下位置添加新的连接的信息
如下位置添加新的连接工厂,把redisOrderTemplate拷贝下来,改改Bean注解,改改连接的host、port、数据库就行了。该改的地方都用红框画出来了。
在想使用的地方引入
在想使用的地方调用一下