1.说明
项目中想要将一部分数据放入Redis的其他库内,需要动态进行数据库的切换。
2.代码实现
2.1 配置
# 独立的配置信息 jedis: database: 7 host: 192.168.0.000 port: 6379 password:
2.2 代码实现及调用方法
// 工具类 @Component public class JedisUtil { @Autowired private JedisConfig jedisConfig; // 管理单个Jedis对象【这里可以使用Map管理多个对象,有需求的小伙伴可以发挥一下】 private Jedis jedis; public synchronized String setCache(String key, String value) { if (jedis == null) { String host = jedisConfig.getHost(); int port = jedisConfig.getPort(); int database = jedisConfig.getDatabase(); // 初始化Redis客户端 jedis = new Jedis(host, port); // 切换数据库 jedis.select(database); } return jedis.set(key, value); } } // 代码调用 // 使用时类注入对象 @Autowired private JedisUtil jedisUtil; // 调用 jedisUtil.setCache(key, value);
2.3 升级版
// 管理多个Jedis对象 @Component public class JedisManagerUtil { @Autowired private JedisConfig jedisConfig; /** * 统一管理Jedis对象 */ private Map<Integer, Jedis> jedisMap = new HashMap<>(16); /** * 写入数据 * * @param key redis的key * @param value redis的value * @param database 写入的库index * @return 写入结果 */ public synchronized String setCache(String key, String value, int database) { if (!jedisMap.containsKey(database)) { String host = jedisConfig.getHost(); int port = jedisConfig.getPort(); Jedis jedis = new Jedis(host, port); jedis.select(database); jedisMap.put(database, jedis); return jedis.set(key, value); } else { Jedis jedis = jedisMap.get(database); return jedis.set(key, value); } } } // 测试调用 @SpringBootTest class JedisApplicationTests { @Autowired private JedisManagerUtil jedisManagerUtil; @Test void jedisManagerUtilTest() { System.out.println(jedisManagerUtil.setCache("jedis", "ok", 3)); System.out.println(jedisManagerUtil.setCache("jedis", "ok", 4)); System.out.println(jedisManagerUtil.setCache("jedis", "ok", 5)); } }
调用结果:
看看数据库:
4.总结
这个工具还可以进行扩展,这里仅展示动态切换相关操作。