婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 如何自定義redis工具jar包供其他SpringBoot項目直接使用

如何自定義redis工具jar包供其他SpringBoot項目直接使用

熱門標(biāo)簽:山東外呼銷售系統(tǒng)招商 貴州電銷卡外呼系統(tǒng) 魔獸2青云地圖標(biāo)注 十堰營銷電銷機器人哪家便宜 宿遷便宜外呼系統(tǒng)平臺 超呼電話機器人 日本中國地圖標(biāo)注 鄭州人工智能電銷機器人系統(tǒng) 北京400電話辦理收費標(biāo)準(zhǔn)

注:(最終redis數(shù)據(jù)庫連接信息由使用者項目模塊配置提供)

一、Redis常用存儲操作實現(xiàn)(redis-util模塊,該module最后會打包成jar供其他服務(wù)使用)

1.引用相關(guān)依賴

!-- 如果有繼承父級spring-boot-starter-parent,可不用添加版本號 -->
!-- Redis緩存 [start] -->
		dependency>
			groupId>org.springframework.boot/groupId>
			artifactId>spring-boot-starter-data-redis/artifactId>
			version>2.3.0.RELEASE/version>
		/dependency>
!-- Redis緩存 [end] -->

2.配置reids連接信息

注:由于此時還處于redis-util工具包開發(fā)階段,所以reids的配置文件還是由自己的模塊來提供,后期打包成jar時,會清除redis-util工具包里的redis連接信息,然后由需要使用redis-util工具的服務(wù)模塊提供reids的連接信息;
在reids-util的application.properties里配置redis數(shù)據(jù)庫連接信息

#Redis服務(wù)器地址
spring.redis.host=127.0.0.1
#Redis服務(wù)器連接端口
spring.redis.port=6379
#Redis數(shù)據(jù)庫索引(默認(rèn)為0)
spring.redis.database=0 

3.自定義序列化類,將存儲在Redis的對象序列化為json格式

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.io.Serializable;
@Configuration
@EnableAutoConfiguration
public class RedisConfig {
  @Bean
  public RedisTemplateString, Serializable> redisTemplate(LettuceConnectionFactory redisConnectionFactory){
    RedisTemplateString, Serializable> template = new RedisTemplate();
    template.setKeySerializer(new StringRedisSerializer());
    template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    template.setHashKeySerializer(new StringRedisSerializer());
    template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    template.setConnectionFactory(redisConnectionFactory);
    return template;
  }
}

4.開發(fā)相應(yīng)的redis常用方法

package com.gh.redis.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Repository
public class RedisUtil {

  @Autowired
  RedisTemplateString, Serializable> redisTemplate;  // key-value是對象的

  public RedisUtil(){

  }

  /**
   * 判斷是否存在key
   * @param key 主鍵
   * @return true或false
   */
  public boolean hasKey(String key) {
    return Boolean.TRUE.equals(redisTemplate.hasKey(key));
  }

  /**
   * 新增、修改Redis鍵值
   * @param key 主鍵
   * @param value 值
   */
  public void insertOrUpdate(String key, Serializable value) {
    redisTemplate.opsForValue().set(key, value);
  }

  /**
   * 新增、修改Redis鍵值,并設(shè)置有效時間(秒)
   * @param key 主鍵
   * @param value 值
   * @param seconds 有效時間(秒)
   */
  public void insertOrUpdateBySeconds(String key, Serializable value, long seconds) {
    redisTemplate.opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
  }

  /**
   * 新增、修改Redis鍵值,并設(shè)置有效時間(分)
   * @param key 主鍵
   * @param value 值
   * @param minutes 有效時間(分)
   */
  public void insertOrUpdateByMinutes(String key, Serializable value, long minutes) {
    redisTemplate.opsForValue().set(key, value, minutes, TimeUnit.MINUTES);
  }

  /**
   * 新增、修改Redis鍵值,并設(shè)置有效時間(小時)
   * @param key 主鍵
   * @param value 值
   * @param hours 有效時間(小時)
   */
  public void insertOrUpdateByHours(String key, Serializable value, long hours) {
    this.redisTemplate.opsForValue().set(key, value, hours, TimeUnit.HOURS);
  }

  /**
   * 新增、修改Redis鍵值,并設(shè)置有效時間(天)
   * @param key 主鍵
   * @param value 值
   * @param days 有效時間(天)
   */
  public void insertOrUpdateByDays(String key, Serializable value, long days) {
    this.redisTemplate.opsForValue().set(key, value, days, TimeUnit.DAYS);
  }

  /**
   * 通過主鍵獲取值
   * @param key 主鍵
   * @return
   */
  public Object get(String key) {
    return redisTemplate.opsForValue().get(key);
  }

  /**
   * 獲取redis的所有key里包含pattern字符的key集
   * @param pattern 模糊查詢字符
   * @return
   */
  public SetString> getPattern(String pattern) {
    return redisTemplate.keys("*" + pattern + "*");
  }

  /**
   * 刪除指定redis緩存
   * @param key 主鍵
   * @return
   */
  public boolean remove(String key) {
    return Boolean.TRUE.equals(redisTemplate.delete(key));
  }

  /**
   * 刪除指定的多個緩存
   * @param keys 主鍵1,主鍵2,...
   * @return 刪除主鍵數(shù)
   */
  public int removes(String... keys){
    int count = 0;
    ListString> deleteFails = new ArrayList>();

    for (String key : keys) {
      if (Boolean.TRUE.equals(redisTemplate.delete(key))) {
        ++count;
      } else {
        deleteFails.add(key);
      }
    }

    if (!CollectionUtils.isEmpty(deleteFails)) {
      System.err.println("======> Redis緩存刪除失敗的key:" + deleteFails.toString());
    }
    return count;
  }

  /**
   * 刪除所有的鍵值對數(shù)據(jù)
   * @return 清除鍵值對數(shù)據(jù)量
   */
  public int removeAll(){
    SetString> keys = redisTemplate.keys("*");
    Long delete = 0L;

    if (keys != null) {
      delete = redisTemplate.delete(keys);
    }

    return delete != null ? delete.intValue() : 0;
  }

}

5.工具包開發(fā)完成,測試一下

import com.gh.common.toolsclass.ResultData;
import com.gh.redis.util.RedisUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Set;

@SpringBootTest
class RedisApplicationTests {

  @Autowired
  private RedisUtil redisUtil;

  @Test
  void test1() {
    ResultData resultData = new ResultData();
    resultData.setCode(0);
    resultData.setMessage("redis測試");
    resultData.setData("666666");
    redisUtil.insertOrUpdate("demo", resultData);
    System.err.println(redisUtil.hasKey("demo"));
    Object demo = redisUtil.get("demo");
    ResultData bo = (ResultData) demo;
    System.err.println(bo.toString());
  }

  @Test
  void test2() {
    SetString> list = redisUtil.getPattern("l");
    for (String s: list) {
      System.err.println(s);
    }
  }
}

其中ResultData是自定義的一個用于返回信息的對象,可用其他對象替代,但是該對象需要實現(xiàn)Serializable接口(ResultData implements Serializable)

運行test1:

運行test2:

其他方法自行測試,這里不一 一展示;

6.清除redis數(shù)據(jù)庫連接信息

自此redis-util工具包開發(fā)完成,可供其他服務(wù)使用,最后清除redis-util模塊application.properties里的redis數(shù)據(jù)庫連接信息。之后的連接信息由使用者模塊提供,這樣才符合redis-util作為一個純工具包的定義。

二、創(chuàng)建一個consumer項目來引用redis-util工具包

1.在consumer項目的pom.xml中添加reids-utils的依賴

!-- redis工具包 [start] -->
dependency>
      groupId>com.gh/groupId>
      artifactId>redis-util/artifactId>
      version>0.0.1-SNAPSHOT/version>
    /dependency>
!-- redis工具包 [end] -->

pom如何引用自定義jar包依賴自行百度,如果在同一父工程模塊下,可直接這么引用。不在同一父工程,需要先將jar包放到maven倉庫。

2.在consumer的application.properties配置文件里添加redis數(shù)據(jù)的連接信息

#Redis服務(wù)器地址
spring.redis.host=127.0.0.1
#Redis服務(wù)器連接端口
spring.redis.port=6379
#Redis數(shù)據(jù)庫索引(默認(rèn)為0)
spring.redis.database=0

3.測試在cunsumer里是否可以使用redis-util工具包的方法

package com.gh.consumer;

import com.gh.common.toolsclass.ResultData;
import com.gh.redis.util.RedisUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class ConsumerApplicationTests {

// 這里使用該構(gòu)造器注入的方式,因為使用變量注入
  final RedisUtil redisUtil;

  @Autowired
  public ConsumerApplicationTests(RedisUtil redisUtil){
    this.redisUtil = redisUtil;
  }

  @Test
  void test1() {
    // 如果存在demo緩存,就刪除
    if (redisUtil.hasKey("demo")) {
      System.err.println(redisUtil.remove("demo"));
    }
    // 插入新的demo緩存
    ResultData resultData = new ResultData();
    resultData.setCode(0);
    resultData.setMessage("redis測試-2");
    resultData.setData("888888");
    redisUtil.insertOrUpdate("demo", resultData);
    Object demo = redisUtil.get("demo");
    ResultData bo = (ResultData) demo;
    System.err.println(bo.toString());
  }

  @Test
  void test2() {
    redisUtil.insertOrUpdate("test", "redis工具測試");
    System.err.println(redisUtil.get("test"));
  }

}

運行test1,此時會發(fā)現(xiàn)控制臺提示找不到RedisUtil的bean

4.在啟動類添加掃描

其他注解不用管,解決redis-util工具包bean掃描不到的問題,只需要添加注解@ComponentScan(value = “com.gh.redis.*”)就好

package com.gh.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.scheduling.annotation.EnableScheduling;


//@EnableDiscoveryClient eureka開啟發(fā)現(xiàn)服務(wù)功能
@EnableFeignClients(basePackages = "com.gh.consumer.feign")
//@ComponentScan(basePackages = "com.gh.consumer.*")
@ComponentScans(value = {
		@ComponentScan(value = "com.gh.consumer.*")
		,@ComponentScan(value = "com.gh.redis.*")
})
@EnableScheduling	// 開啟定時任務(wù)功能
@SpringBootApplication
public class ConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConsumerApplication.class, args);
	}
}

5.再次測試

成功調(diào)用redis-utils工具包方法!

到此這篇關(guān)于如何自定義redis工具jar包供其他SpringBoot項目直接使用的文章就介紹到這了,更多相關(guān)redis工具jar包springboot使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • SpringBoot 開啟Redis緩存及使用方法
  • springboot使用redis對單個對象進行自動緩存更新刪除的實現(xiàn)
  • springboot redis使用lettuce配置多數(shù)據(jù)源的實現(xiàn)
  • Springboot項目中使用redis的配置詳解
  • SpringBoot使用Redis的zset統(tǒng)計在線用戶信息
  • 使用SpringBoot集成redis的方法
  • springboot使用redis實現(xiàn)從配置到實戰(zhàn)

標(biāo)簽:吉安 臺州 北京 大慶 果洛 江蘇 楊凌 朝陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何自定義redis工具jar包供其他SpringBoot項目直接使用》,本文關(guān)鍵詞  如何,自定義,redis,工具,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何自定義redis工具jar包供其他SpringBoot項目直接使用》相關(guān)的同類信息!
  • 本頁收集關(guān)于如何自定義redis工具jar包供其他SpringBoot項目直接使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲成av人**亚洲成av**| 91欧美激情一区二区三区成人| 久久er99精品| 日韩欧美国产综合| av亚洲产国偷v产偷v自拍| 欧美午夜精品一区二区蜜桃| 亚洲精品在线免费观看视频| 色天天综合色天天久久| 国产亚洲欧美日韩在线一区| 免费在线观看精品| 欧美成人精品二区三区99精品| 欧美一区二区三区小说| 一区二区三区免费看视频| 91免费看`日韩一区二区| 国产女人18水真多18精品一级做| 国产一区不卡在线| 国产精品天美传媒沈樵| 成人午夜视频在线| 综合久久综合久久| 欧美三级欧美一级| 久久国产三级精品| ●精品国产综合乱码久久久久 | 亚洲精选免费视频| 91免费精品国自产拍在线不卡| 亚洲欧洲日本在线| 色综合激情五月| 天堂在线一区二区| 久久精品日产第一区二区三区高清版 | 亚洲激情在线播放| 精品国产露脸精彩对白| 欧美在线观看你懂的| 国产精品99久久久久久似苏梦涵| 亚洲欧美在线视频| 国产日韩欧美一区二区三区乱码| 欧美日本一道本在线视频| 成人av网站在线| 风流少妇一区二区| 国模少妇一区二区三区| 亚洲已满18点击进入久久| 久久色在线观看| 欧美一区二区视频免费观看| 欧美怡红院视频| 91在线播放网址| 国产精品一区一区| 福利一区二区在线观看| 欧美日韩国产精品成人| 久久99精品网久久| 亚洲愉拍自拍另类高清精品| 日韩欧美久久久| 日韩黄色免费网站| 欧美性三三影院| 免费在线观看视频一区| 欧美日韩国产电影| 99久久综合国产精品| 国产乱人伦精品一区二区在线观看 | 91在线视频观看| 成人aaaa免费全部观看| 麻豆专区一区二区三区四区五区| 亚洲天堂2016| 欧美mv日韩mv国产网站app| 欧美午夜精品一区二区三区| 成人免费毛片高清视频| 国产一区二区三区综合| 久久精品国产99国产| 婷婷丁香激情综合| 一区二区三区蜜桃| 亚洲图片有声小说| 首页国产欧美久久| 秋霞影院一区二区| 午夜欧美电影在线观看| 免费视频最近日韩| 国产三级三级三级精品8ⅰ区| 日本亚洲免费观看| 国产一区二区伦理片| 色88888久久久久久影院野外| 一区二区三区在线视频观看 | 狠狠色丁香久久婷婷综合_中| 日韩欧美国产系列| 色狠狠一区二区三区香蕉| 亚洲欧洲精品天堂一级| 欧美色视频在线观看| 91精品国产综合久久久久久漫画 | 99视频精品全部免费在线| 在线视频欧美区| 日韩精品资源二区在线| 欧美一区二区三区四区在线观看 | 国产一区二区伦理片| 99久久亚洲一区二区三区青草| 97se亚洲国产综合自在线不卡| 91免费视频网| 精品国产网站在线观看| 国产精品久久一级| 暴力调教一区二区三区| 日韩欧美一区二区视频| 亚洲女厕所小便bbb| 国产成人免费av在线| 91麻豆精品国产综合久久久久久 | 欧美色手机在线观看| 久久久久久综合| 婷婷开心久久网| 91麻豆免费看| 国产精品久久午夜夜伦鲁鲁| 亚洲免费观看高清完整版在线 | 制服丝袜亚洲网站| 国产偷国产偷精品高清尤物| 日韩中文字幕区一区有砖一区| 99久久99久久精品免费观看| 欧美tickling挠脚心丨vk| 亚洲女厕所小便bbb| 国产乱妇无码大片在线观看| 欧美精品一区二区三区蜜臀| 亚洲第一福利一区| 成人黄色网址在线观看| 中文字幕不卡三区| 欧美日产在线观看| 午夜一区二区三区在线观看| 韩国一区二区视频| 伊人婷婷欧美激情| 91久久精品一区二区三| 亚洲精品ww久久久久久p站| 欧美亚洲国产怡红院影院| 日韩高清不卡一区二区三区| 欧美电影免费观看高清完整版 | 日本欧美在线观看| 久久中文字幕电影| 99久久久精品免费观看国产蜜| 国产精品一区二区久激情瑜伽| 亚洲成人av一区| 日韩欧美一级精品久久| 国产91精品精华液一区二区三区| 国产精品美女久久久久av爽李琼 | 91蜜桃免费观看视频| 亚洲一区二区三区三| 欧美日韩国产另类不卡| ...中文天堂在线一区| 一本色道久久综合亚洲91| 日韩在线卡一卡二| 中文字幕av一区二区三区| 欧美日韩在线一区二区| 国产精品一区二区久久不卡| 亚洲天堂精品视频| 中文字幕精品—区二区四季| 欧美精品第1页| 一本久久a久久免费精品不卡| 麻豆中文一区二区| 日韩电影在线一区| 一区二区欧美在线观看| 国产精品久久久久久久久晋中| 日韩欧美一区二区三区在线| 91视频在线看| 不卡一区中文字幕| 97久久人人超碰| 北岛玲一区二区三区四区| 国产老肥熟一区二区三区| 蜜桃精品视频在线观看| 成人免费视频视频| 亚洲欧洲性图库| 欧美日韩免费视频| 一区二区三区在线观看视频| 精品在线观看免费| 欧美日韩极品在线观看一区| 国产日韩亚洲欧美综合| 99久久综合狠狠综合久久| 成人av综合一区| 亚洲一区国产视频| 91在线码无精品| 丝袜国产日韩另类美女| 日本精品免费观看高清观看| 91色视频在线| www.久久精品| 91久久线看在观草草青青| 99re亚洲国产精品| 在线一区二区三区| 欧美成人女星排行榜| 国产精品三级视频| 丝袜亚洲另类欧美| 成人h动漫精品一区二区| 精品一区二区三区在线观看| 亚洲一区二区三区在线看 | 国产成人高清在线| av资源网一区| 日韩三级视频中文字幕| 久久影院午夜片一区| 亚洲综合在线视频| 国产不卡视频在线观看| 91精品福利在线一区二区三区| 日韩欧美国产一二三区| 亚洲欧美韩国综合色| 懂色一区二区三区免费观看| 6080日韩午夜伦伦午夜伦| 国产一区欧美一区| 欧美va亚洲va国产综合| 亚洲午夜久久久久中文字幕久| 成人性视频免费网站| 精品欧美一区二区三区精品久久| 午夜视频久久久久久| 91行情网站电视在线观看高清版| 中文字幕免费不卡在线| 国产成人综合自拍| 中文欧美字幕免费|