本文共 3369 字,大约阅读时间需要 11 分钟。
背景:
一个小需求,单Redis服务实例下根据业务配置多个数据库,需要自定义Redis配置稍作改动才能实现,此时就不能RedisTemplate一步就位了~注: Redis使用 单线程-多路复用 IO模型 ,别把多业务的并发全加在一个redis实例上,最好多实例或者集群处理!
基本的配置我就不多说了,可以参考我之前的博客:
直接上步骤:
在 application.yml 中添加参数配置:
redis: //此处设置多业务对应数据库 database: fore: 0 wechat: 1 host: 117.133.13.74 password: yjyj port: 6379 timeout: 3000 pool: max-idle: 30 min-idle: 0 max-wait: -1
增加自定义配置类:
** * @Author: yuanj * @Date: 2019/2/16 16:35 */@Configuration@EnableAutoConfigurationpublic class RedisConfig { @Value("${redis.database.fore}") private int foreDatabase; @Value("${redis.database.wechat}") private int wechatDatabase; @Value("${redis.host}") private String host; @Value("${redis.password}") private String password; @Value("${redis.port}") private int port; @Value("${redis.timeout}") private int timeout; @Value("${redis.pool.max-idle}") private int maxIdle; @Value("${redis.pool.min-idle}") private int minIdle; @Value("${redis.pool.max-wait}") private long maxWait; @Bean public JedisPoolConfig getJedisPoolConfig() { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); jedisPoolConfig.setMaxIdle(maxIdle); jedisPoolConfig.setMinIdle(minIdle); jedisPoolConfig.setMaxWaitMillis(maxWait); return jedisPoolConfig; } @Bean(name = "foreRedisTemplate") public RedisTemplate getForeRedisTemplate(){ JedisConnectionFactory connectionFactory = new JedisConnectionFactory(); connectionFactory.setPoolConfig(getJedisPoolConfig()); connectionFactory.setDatabase(foreDatabase); //此处配置database connectionFactory.setHostName(host); connectionFactory.setPassword(password); connectionFactory.setPort(port); connectionFactory.setTimeout(timeout); connectionFactory.afterPropertiesSet(); //记得添加这行! StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(connectionFactory); return stringRedisTemplate; } @Bean(name = "wechatRedisTemplate") public RedisTemplate getWechatRedisTemplate(){ JedisConnectionFactory connectionFactory = new JedisConnectionFactory(); connectionFactory.setPoolConfig(getJedisPoolConfig()); connectionFactory.setDatabase(wechatDatabase); connectionFactory.setHostName(host); connectionFactory.setPassword(password); connectionFactory.setPort(port); connectionFactory.setTimeout(timeout); connectionFactory.afterPropertiesSet(); StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(connectionFactory); return stringRedisTemplate; }}
测试:
@RestControllerpublic class TestController { @Autowired private RedisConfig redisConfig; @Autowired private RedisTemplate foreRedisTemplate; @Autowired private RedisTemplate wechatRedisTemplate; @RequestMapping(value = "/testRedis", method = RequestMethod.GET) public String test() { // RedisTemplate foreRedisTemplate = redisConfig.getForeRedisTemplate(); ValueOperations operations = foreRedisTemplate.opsForValue(); operations.set("age", "11");// RedisTemplate wechatRedisTemplate = redisConfig.getWechatRedisTemplate(); ValueOperations operations2 = wechatRedisTemplate.opsForValue(); operations2.set("address", "bj"); return "OK"; }}
注意:上面既可以直接autowire两个RedisTemplate,也可以通过redisConfig得到。
o ~转载地址:http://lrlfb.baihongyu.com/