美文网首页
spring-data-redis进行选库操作

spring-data-redis进行选库操作

作者: stevejobson | 来源:发表于2017-12-21 21:18 被阅读0次

前言

spring-data-redis对reids基本操作进行很好的封装,操作时候简单便捷,但是spring-data-redis在初始化选redis某个库后不能进行修改,如果想以数据库区分业务逻辑需要进行选库操作

配置

  • 为了简单配置,在springboot的基础上配置reids操作

在springboot配置的基础上引入spring-data-redis,不同版本的springboot引入的spring-boot-starter-data-redis可能不同,具体参看官方文档

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
        <version>1.5.9.RELEASE</version>
    </dependency>

在application.yml或者application.properties中配置基本的连接信息如下:

spring:
  redis:
    database: 0
    host: 127.0.0.1
    password:
    pool:
      max-active: 8
      max-wait: 5000
      max-idle: 8
      min-idle: 3
    timeout: 5000

之后自定义RedisTemplate继承spring-data-redis的StringRedisTemplate,定义REDIS_DB_INDEX为ThreadLocal类型,每个线程选库操作互不影响。


    public static ThreadLocal<Integer> REDIS_DB_INDEX = new ThreadLocal<Integer>(){
        @Override
        protected Integer initialValue() {
            return 0;
        }
    };

    @Override
    protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
        try {
            Integer dbIndex = REDIS_DB_INDEX.get();
            //如果设置了dbIndex
            if (dbIndex != null) {
                if (connection instanceof JedisConnection) {
                    if (((JedisConnection) connection).getNativeConnection().getDB().intValue() != dbIndex) {
                        connection.select(dbIndex);
                    }
                } else {
                    connection.select(dbIndex);
                }
            } else {
                connection.select(0);
            }
        } finally {
            REDIS_DB_INDEX.remove();
        }
        return super.preProcessConnection(connection, existingConnection);
    }
}

注册自定义的RedisTemplate到Bean容器中

@Configuration
public class RedisConfig {


    @Bean
    public RedisSerializer fastJson2JsonRedisSerializer() {
        return new FastJson2JsonRedisSerializer<Object>(Object.class);
    }

    @Bean
    public RedisTemplate initRedisTemplate(RedisConnectionFactory redisConnectionFactory, RedisSerializer fastJson2JsonRedisSerializer) throws Exception {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.setValueSerializer(fastJson2JsonRedisSerializer);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

上述代码使用FastJson座位redis默认序列化工具,配置FastJson序列化需要自定义序列化器

public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {

    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

    private Class<T> clazz;

    public FastJson2JsonRedisSerializer(Class<T> clazz) {
        super();
        this.clazz = clazz;
    }

    @Override
    public byte[] serialize(T t) throws SerializationException {
        if (t == null) {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }

    @Override
    public T deserialize(byte[] bytes) throws SerializationException {
        if (bytes == null || bytes.length <= 0) {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);

        return (T) JSON.parseObject(str, clazz);
    }

}

之后便可以进行选库操作:

    RedisTemplate.REDIS_DB_INDEX.set(10);
    redisTemplate.opsForValue().set("author","stevejobson");

当然最好自己写一份RedisServcie封装上述操作。

注意:

Redis进行选库操作并不能提高运行效率,不过如果业务量过大,可以将不同模块的不同业务的reids存储存放到不同库中,有效的区分数据

当然强烈建议在设计redis key的时候进行能的对业务进行区分,便于后期维护

相关文章

  • spring-data-redis进行选库操作

    前言 配置 为了简单配置,在springboot的基础上配置reids操作 在springboot配置的基础上引入...

  • redis 问题-操作redis时发现存储在redis中的key

    问题: 最近使用spring-data-redis RedisTemplate 操作redis时发现存储在redi...

  • Springboot整合redis

    springboot提供了spring-data-redis的框架来整合redis的操作。下面主要介绍,sprin...

  • MySQL第一天

    数据库操作 创建数据库 create database 数据库名; 查看数据库 show databases; 选...

  • SQLite 增删改查

    创建数据库 对数据库进行操作

  • mysql语句

    DDL:对数据库,表,列进行操作DDL:对数据库,表,列进行操作 关键字:create 创...

  • SpringBoot中Redis的使用详解

    在Springboot中提供了spring-data-redis操作Redis很方便,底层它提供了Jedis和Le...

  • sql学习

    一、对数据库的操作 二、对数据库表的操作 三、对数据库表记录进行操作(修改) 多表查询

  • MYSQL入门学习基础片-增删改查

    一、DDL数据定义语言 1、数据库操作(暂无需掌握) 2、表结构操作 前提:先使用USE 数据库名 选择数据库 选...

  • Mysql的迁移工作总结

    Mysql数据库进行迁移操作 背景:由于之前的数据库维护比较散漫,每次进行数据库的迁移操作都会伤筋动骨的难受,所以...

网友评论

      本文标题:spring-data-redis进行选库操作

      本文链接:https://www.haomeiwen.com/subject/chdzwxtx.html