SpringBoot框架下基于LettuceConnectionFactory的RedisTemplate切换数据库的正确姿势

package com.jake.bpmmanager.util;

import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

public class RedisUtil {

    /**
     * @param redisTemplate 基于springboot的Redis模板对象
     */
    public static void setDB4RedisTemplate(RedisTemplate<String, String> redisTemplate, int dbIndex) {
        LettuceConnectionFactory lcf = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();
        if (lcf != null) {
            lcf.setDatabase(dbIndex);
            redisTemplate.setConnectionFactory(lcf);
        }
    }

}

注意,使用上述方法进行Redis数据库切换后,整个项目的RedisTemplate连接数据库都会被切换。比如,在UserServiceImpl类中将注入的RedisTemplate的数据库切换到db1,那么EmployeeServiceImpl注入的RedisTemplate的数据库也会切换至db1。所以这种方法并不是线程安全的,可能会导致数据库中没有存放期待的数据。
可以新建新的Jedis连接,Jedis与RedisTemplate彼此独立,或许可以做到一个项目中访问多个Redis数据库。

发布了79 篇原创文章 · 获赞 322 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_15329947/article/details/88891949
今日推荐