前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis Jedis 按需插入不同数据库

Redis Jedis 按需插入不同数据库

作者头像
收心
发布2022-01-19 14:20:27
1.1K0
发布2022-01-19 14:20:27
举报
文章被收录于专栏:Java实战博客Java实战博客

编写代码时候遇到一个需求,需要将缓存数据分批插入不同的数据库中。故收集了代码,并进行了测试!

环境准备:相关Maven的依赖

代码语言:javascript
复制
        <!-- springboot中的redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- jedis依赖-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.6.0</version>
        </dependency>

说明:我们是通过Jedis 来进行不同的数据库插入

相关代码

初始化Jedis连接池 配置文件

代码语言:javascript
复制
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

@Configuration
public class JedisConfig {

    @Bean
    public JedisPool getJedisPool() {
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(8);
        config.setMaxTotal(200);
        config.setMaxWaitMillis(1000 * 100);
        JedisPool pool = new JedisPool(config, Host, Port, 超时时间(毫秒,默认是2000),数据库密码);
        return pool;
    }
    
}

JedisUtil

代码语言:javascript
复制
package com.xunliao.utils;

import com.google.gson.Gson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * JedisUtil 主要是 多redis库插值
 */
@Component
public class JedisUtil {

    @Autowired
    private JedisPool jedisPool;

    /** 不设置过期时长 */
    public final static int NOT_EXPIRE = -1;
    /** 过期时长*/
    public final static int EXRP_WEEK = 7 * 60 * 60 * 24;

    private final static Gson gson = new Gson();

    /**
     * 插入值-对象,指定数据库 指定过期时间
     *
     * @param key     键
     * @param value   值
     * @param dbIndex 数据库索引 范围 0-15 默认0
     * @param expire  过期时间 单位:秒
     */
    public void set(String key, Object value, Integer dbIndex, int expire) {
        Jedis jedis = getJedis(dbIndex);
        jedis.set(key, toJson(value));
        if (expire != NOT_EXPIRE) {
            jedis.expire(key, expire);
        }
    }

    /**
     * 插入值-对象,指定数据库索引
     */
    public void set(String key, Object value, Integer dbIndex) {
        set(key, value, dbIndex, NOT_EXPIRE);
    }

    /**
     * 获取值-对象,指定数据库索引,并设置过期时间
     * @return
     */
    public <T> T get(String key, Class<T> clazz, Integer dbIndex, int expire) {
        Jedis jedis = getJedis(dbIndex);
        try {
            String value = jedis.get(key);
            if (expire != NOT_EXPIRE) {
                jedis.expire(key, expire);
            }
            return value == null ? null : fromJson(value, clazz);
        } finally {
            jedis.close();
        }
    }

    /**
     * 取值-对象 指定数据库索引
     */
    public <T> T get(String key, Class<T> clazz, Integer dbIndex) {
        return get(key, clazz, dbIndex, NOT_EXPIRE);
    }

    /**
     * 取值-字符串,指定数据库索引,设置过期时间
     */
    public String get(String key, Integer dbIndex, int expire) {
        Jedis jedis = getJedis(dbIndex);
        try {
            String value = jedis.get(key);
            if (expire != NOT_EXPIRE) {
                jedis.expire(key, expire);
            }
            return value;
        } finally {
            jedis.close();
        }
    }

    /**
     * 取值-字符串,指定数据库索引
     */
    public String get(String key, Integer dbIndex) {
        return get(key, dbIndex, NOT_EXPIRE);
    }

    /**
     * 删除,指定索引
     */
    public void delete(String key, Integer dbIndex) {
        Jedis jedis = getJedis(dbIndex);
        try {
            jedis.del(key);
        } finally {
            jedis.close();
        }
    }


    /**
     * 获取jedis对象,并指定dbIndex
     *
     * @param dbIndex
     */
    private Jedis getJedis(Integer dbIndex) {
        Jedis jedis = jedisPool.getResource();
        if (dbIndex == null || dbIndex > 15 || dbIndex < 0) {
            dbIndex = 0;
        }
        jedis.select(dbIndex);
        return jedis;
    }

    /**
     * Object转成JSON数据
     */
    private String toJson(Object object) {
        if (object instanceof Integer || object instanceof Long || object instanceof Float || object instanceof Double
                || object instanceof Boolean || object instanceof String) {
            return String.valueOf(object);
        }
        return gson.toJson(object);

    }

    /**
     * JSON数据,转成Object
     */
    private <T> T fromJson(String json, Class<T> clazz) {
        return gson.fromJson(json, clazz);
    }
}

测试代码 jedisUtil.set(“Key“,”Value“,DB_Number,TTL);

代码语言:javascript
复制
import com.xunliao.RunApplication;
import com.xunliao.utils.JedisUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.xunliao.RunApplication;
import com.xunliao.utils.JedisUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {RunApplication.class})
public class JedisTest {

    @Autowired
    private JedisUtil jedisUtil;

    @Test
    public void contextLoads() {
        //参数以此是 Key Value 数据库序号 超时时间(秒)
        for (int i = 0; i < 99; i++) {
            jedisUtil.set("key"+i,"value"+i,1,60);
            jedisUtil.set("key"+i,"value"+i,2,120);
        }
    }
}

Redis 数据库结果

完成

特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备:相关Maven的依赖
  • 说明:我们是通过Jedis 来进行不同的数据库插入
  • 相关代码
    • 初始化Jedis连接池 配置文件
      • JedisUtil
        • 测试代码 jedisUtil.set(“Key“,”Value“,DB_Number,TTL);
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档