千家信息网

Springboot2.X中怎么切换redis库

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,Springboot2.X中怎么切换redis库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、application
千家信息网最后更新 2025年01月24日Springboot2.X中怎么切换redis库

Springboot2.X中怎么切换redis库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1、application.properties
#redisspring.redis.database=0spring.redis.host=localhostspring.redis.port=6379spring.redis.password=spring.redis.timeout=10000msspring.redis.jedis.pool.max-active=8spring.redis.jedis.pool.max-wait=-1msspring.redis.jedis.pool.min-idle=0spring.redis.jedis.pool.max-idle=8
2、pom文件
    org.springframework.boot    spring-boot-starter-data-redis    redis.clients    jedis    2.9.0    commons-lang    commons-lang    2.5    com.google.collections    google-collections    1.0    org.projectlombok    lombok    true
3、配置类
import org.springframework.beans.factory.annotation.Value;import org.springframework.cache.annotation.CachingConfigurerSupport;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;/** * @Author:MuJiuTian * @Description:redis的配置,这里默认设置使用redis:0 数据库 * @Date: Created in 下午11:27 2019/7/4 */@Configuration@EnableCachingpublic class RedisCacheConfiguration extends CachingConfigurerSupport {    @Value("${spring.redis.host}")    private String host;    @Value("${spring.redis.port}")    private int port;    @Value("${spring.redis.timeout}")    private String timeout;    @Value("${spring.redis.jedis.pool.max-idle}")    private int maxIdle;    @Value("${spring.redis.jedis.pool.max-wait}")    private String maxWaitMillis;    @Value("${spring.redis.password}")    private String password;    @Bean    public JedisPool redisPoolFactory() {        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();        jedisPoolConfig.setMaxIdle(maxIdle);        jedisPoolConfig.setMaxWaitMillis(Long.valueOf(maxWaitMillis.substring(0,maxWaitMillis.length()-2)));        JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port,Integer.valueOf(timeout.substring(0,timeout.length()-2)));        return jedisPool;    }}
4、redis工具类
import java.util.List;import java.util.Map;public interface RedisService {        String setex(String key, int seconds,String value,int index);    String set(String key, String value,int index);    String get(String key,int index);}
5、redis具体实现类
import org.apache.commons.lang.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;@Componentpublic class CacheSingleService implements RedisService{    @Autowired    private JedisPool jedisPool;    public void returnResource(Jedis jedis) {        jedis.close();    }    public Jedis getResource(int index) {        Jedis jedis = jedisPool.getResource();        jedis.select(index);        return jedis;    }    public String setex(String key, int seconds, String value,int index) {        Jedis jedis = null;        try {            jedis = getResource(index);            return jedis.setex(key, seconds, value);        } catch (Exception e) {            e.printStackTrace();        } finally {            returnResource(jedis);        }        return null;    }    public String set(String key, String value,int index){        Jedis jedis = null;        try {            jedis = getResource(index);            return jedis.set(key, value);        } finally {            returnResource(jedis);        }    }    public String get(String key,int index) {        String value = null;        Jedis jedis = null;        try {            jedis = getResource(index);            value = jedis.get(key);        } catch (Exception e) {            e.printStackTrace();        } finally {            returnResource(jedis);        }        return value;    }}
6、枚举类
/** * @Author:MuJiuTian * @Description:通过枚举类选择redis使用的数据库,一般公司的redis会分不同的数据到不同的库,比如用户信息到0库 * 商品数据放在第二个库,运动数据放在第三库等等跟随项目分配而分配 * @Date: Created in 下午10:13 2019/7/29 */public enum RedisPartition {    //以下分别代表redis 0-15库    INFO(0),    One(1),    Two(2),    THREE(3),    FOUR(4),    FIVE(5),    SIX(6),    SEVEN(7),    EIGHT(8),    NINE(9),    TEN(10),    ELEVEN(11),    TWELVE(12),    THIRTEEN(13),    FOURTEEN(14),    FIFTEEN(15);    private int ordinal;    //构造方法    RedisPartition(int ordinal) {        this.ordinal = ordinal;    }    public void setOrdinal(int dbNum) {        this.ordinal = dbNum;    }    public int getOrdinal() {        return ordinal;    }    @Override    public String toString() {        return ""+ordinal;    }}
7、Controller层
import lombok.extern.slf4j.Slf4j;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestController@Slf4jpublic class TestController {    @Autowired    CacheSingleService singleService;    @GetMapping("/test3")    public String test3() {        String key = "osc";        String str = "i love osc";        //存放在5数据库,默认是0        singleService.set(key,"iloveyou",RedisPartition.SIX.getOrdinal());        //存放在4数据库,默认是0        singleService.set(str+"ii","iloveyou",RedisPartition.FIVE.getOrdinal());        return "SUCCESS";    }    @GetMapping(value = "/test4")    public String test4(){        String key = "osc";        String str = "i love osc";        //查询5数据库内容        String str1 = singleService.get(key,RedisPartition.SIX.getOrdinal());        //查询4数据库内容        String str2 = singleService.get(str,RedisPartition.FIVE.getOrdinal());        return str1+str2;    }    public static void main(String[] args) {        System.out.println(RedisPartition.FIFTEEN.getOrdinal());    }}
8、测试结果

使用Redis自带方法同时使用16个数据库,继续使用上面的pom文件依赖

9、Redis工具类

切记:接下来这个适用于Springboot2.1.X的版本,包括2.0.X,2.2.X的版本目前通过以下不能实现数据库的切换。

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.stereotype.Component;@Componentpublic class RedisUtil {    @Autowired    private StringRedisTemplate redisTemplate;    public void setRedisTemplate(StringRedisTemplate redisTemplate) {        this.redisTemplate = redisTemplate;    }    public void setDataBase(int num) {        LettuceConnectionFactory connectionFactory = (LettuceConnectionFactory) redisTemplate.getConnectionFactory();        if (connectionFactory != null && num != connectionFactory.getDatabase()) {            connectionFactory.setDatabase(num);            this.redisTemplate.setConnectionFactory(connectionFactory);            connectionFactory.resetConnection();        }    }    public StringRedisTemplate getRedisTemplate() {        return this.redisTemplate;    }    public void set(String key, String value) {        redisTemplate.opsForValue().set(key, value);    }    //获取指定key的值    public String get(String key) {        return redisTemplate.opsForValue().get(key);    }}
10、Controller测试
@AutowiredRedisUtil redisUtil;@GetMapping("/test")public String test(String key) {    for (int i = 1; i < 3; i++) {        redisUtil.setDataBase(i);        redisUtil.set(key, "" + i + key);    }    //开发环境用下面的代码,上面纯简单测试去不同的redis数据库而已    //redisUtil.setDataBase(RedisPartition.EIGHT.getOrdinal());        return redisUtil.get(key);}

11、总结

两种方式jedis和StringRedisTemplate切换数据库,我更喜欢用jedis,使用SringRedisTemplate我就没有过多的把所有redis方法复制出来。

12、附加

下面的是ssm框架切换同时使用redis数据库的配置,至于redis.xml和redis.properties从网上copy一下吧

@Resource(name="stringRedisTemplate")   private StringRedisTemplate stringRedisTemplate;private StringRedisTemplate choseConnection(RedisConnectionEnum redisEnum){   JedisConnectionFactory factory = (JedisConnectionFactory) stringRedisTemplate.getConnectionFactory();   factory.setDatabase(redisEnum.getDbNum());   stringRedisTemplate.setConnectionFactory(factory);   return stringRedisTemplate;   }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

数据 数据库 切换 不同 内容 方法 面的 测试 配置 同时 工具 文件 版本 分配 帮助 查询 清楚 接下来 代码 代表 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发的是什么 网络安全手抄报四年级漂亮 超微X10DRI服务器默认IP 广东富仓网络技术有限公司 无线网络技术原理应用与实验 基础软件开发详情 大数据和软件开发有什么不同 ssctf全国网络安全大赛 阿里云服务器代金券购买 ibm服务器 做raid 金税盘出现数据库更新失败怎么办 预防网络安全的责任在政府 网络安全培训推文 动态密码口令服务器厂家 韶关无限软件开发销售厂 南森网络技术就业前景 管理员发现文件服务器上有 导航上面服务器包的标志是什么 郑州互联网软件开发要多少钱 推动互联网科技创新 私有云服务器是物理服务器吗 普陀区微型软件开发服务不二之选 供应工业云实时历史数据库公司 网络安全青少年网络文明公约 数据库如何返回数据结构 传奇用什么软件开发 如何加强ftp服务器安全 搭配类软件开发 河津天气预报软件开发 泰顺标准刀片服务器信息推荐
0