最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring boot 配置多個(gè)redis的方法示例

 更新時(shí)間:2018年09月10日 10:20:37   作者:Simeone_xu  
這篇文章主要介紹了Spring boot 配置多個(gè)redis的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Spring Data提供其他項(xiàng)目,用來(lái)幫你使用各種各樣的NoSQL技術(shù),包括MongoDB, Neo4J, Elasticsearch, Solr, Redis,Gemfire, Couchbase和Cassandra。Spring Boot為Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自動(dòng)配置。你可以充分利用其他項(xiàng)目,但你需要自己配置它們。

單個(gè) RedisTemplate 的配置

使用 spring-boot-starter-data-redis 配置一個(gè) redis 是很簡(jiǎn)單的。

pom.xml 中該引入的依賴是要引入的,下面的是完整的 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>me.deweixu</groupId>
 <artifactId>muti-redis</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>muti-redis</name>
 <description>config mutiple redis host</description>

 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.0.4.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
  </dependency>

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
</project>

application.properties 文件增加相關(guān)的配置

spring.redis.host=localhost
spring.redis.port=6379

簡(jiǎn)單的配置就是這樣的,還有一些有關(guān)連接池或其他的詳細(xì)配置可以在 common-application-properties 中參考,或者直接查看 RedisProperties 類。

這里使用 redis 的例子我就直接在主類中示例了。

package me.deweixu.mutiredis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.StringRedisTemplate;

@SpringBootApplication
public class MutiRedisApplication implements CommandLineRunner {

 @Autowired
 StringRedisTemplate stringRedisTemplate;

 @Override
 public void run(String... args) throws Exception {
  BoundValueOperations op = stringRedisTemplate.boundValueOps("PERSON");
  op.set("Deweixu");
 }

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

直接運(yùn)行起來(lái),然后去 redis 查看結(jié)果:

$ redis-cli
127.0.0.1:6379> keys *
1) "PERSON"
127.0.0.1:6379> get PERSON
"Deweixu"
127.0.0.1:6379>

沒(méi)問(wèn)題的,順利的把數(shù)據(jù)存入到了 redis 中。

自定義 RedisTemplate 的序列類

上面的實(shí)現(xiàn)其實(shí)有一個(gè)問(wèn)題,就是 redis 的 key 和 value 只能是 String 類型的,是 redis-starter 默認(rèn)實(shí)現(xiàn)了的一個(gè) StringRedisTemplate。查看其源代碼是這樣的

 public StringRedisTemplate() {
  RedisSerializer<String> stringSerializer = new StringRedisSerializer();
  this.setKeySerializer(stringSerializer);
  this.setValueSerializer(stringSerializer);
  this.setHashKeySerializer(stringSerializer);
  this.setHashValueSerializer(stringSerializer);
 }

如果使用 StringRedisTemplate 存入一個(gè)對(duì)象是要報(bào)錯(cuò)的,我們修改一下代碼試試:

 @Autowired
 StringRedisTemplate stringRedisTemplate;

 @Override
 public void run(String... args) throws Exception {
  BoundValueOperations op = stringRedisTemplate.boundValueOps("PERSON");
  op.set(new Person("Deiweixu", 22));
 }

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

運(yùn)行就報(bào)錯(cuò)如下:

Caused by: java.lang.ClassCastException: me.deweixu.mutiredis.MutiRedisApplication$Person cannot be cast to java.base/java.lang.String
    at org.springframework.data.redis.serializer.StringRedisSerializer.serialize(StringRedisSerializer.java:35) ~[spring-data-redis-2.0.9.RELEASE.jar:2.0.9.RELEASE]
    at org.springframework.data.redis.core.AbstractOperations.rawValue(AbstractOperations.java:126) ~[spring-data-redis-2.0.9.RELEASE.jar:2.0.9.RELEASE]
    at org.springframework.data.redis.core.DefaultValueOperations.set(DefaultValueOperations.java:197) ~[spring-data-redis-2.0.9.RELEASE.jar:2.0.9.RELEASE]
    at org.springframework.data.redis.core.DefaultBoundValueOperations.set(DefaultBoundValueOperations.java:110) ~[spring-data-redis-2.0.9.RELEASE.jar:2.0.9.RELEASE]
    at me.deweixu.mutiredis.MutiRedisApplication.run(MutiRedisApplication.java:19) [classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
    ... 5 common frames omitted

這樣我們可以自己配置一下序列化類,這里我們把對(duì)象序列化為一個(gè) json 存入到 redis 中

 @Bean
 JedisConnectionFactory jedisConnectionFactory() {
  return new JedisConnectionFactory();
 }

 @Bean
 RedisTemplate<String, Object> firstRedisTemplate() {
  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  ObjectMapper om = new ObjectMapper();
  om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(om);
  redisTemplate.setKeySerializer(new StringRedisSerializer());
  redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
  redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
  redisTemplate.setConnectionFactory(jedisConnectionFactory());
  return redisTemplate;
 }

 @Autowired
 RedisTemplate<String, Object> redisTemplate;

 @Override
 public void run(String... args) throws Exception {
  BoundValueOperations<String, Object> op = redisTemplate.boundValueOps("PERSON");
  People people = new People();
  people.setAge(26);
  people.setName("Deweixu");
  op.set(people);
  People getPeople = (People) op.get();
  System.out.println(getPeople.getName() + "," + getPeople.getAge());
 }

上面使用了 Jedis 的配置和 GenericJackson2JsonRedisSerializer 類,所以 maven 要引入依賴

<dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>2.9.0</version>
</dependency>
<dependency>
 <groupId>redis.clients</groupId>
 <artifactId>jedis</artifactId>
</dependency>

這樣運(yùn)行可以看到 redis 中變成這樣了:

127.0.0.1:6379> get PERSON
"[\"me.deweixu.mutiredis.entity.People\",{\"name\":\"Deweixu\",\"age\":26}]"
127.0.0.1:6379>

配置另外一個(gè) redisTemplate

 @Bean
 RedisTemplate<String, Object> secondRedisTemplate() {
  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
  ObjectMapper om = new ObjectMapper();
  om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(om);
  redisTemplate.setKeySerializer(new StringRedisSerializer());
  redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
  redisTemplate.setHashKeySerializer(new StringRedisSerializer());
  redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
  // 這里的 redis 信息也是可以寫入配置文件,用 @Value 讀入
  // 這里是單機(jī)的配置,看看源代碼還可以配置集群和哨兵模式
  RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration("localhost", 6379);
  JedisConnectionFactory factory = new JedisConnectionFactory(configuration);
  redisTemplate.setConnectionFactory(factory);
  return redisTemplate;
 }

注入 secondRedisTemplate 即可

 @Autowired
 RedisTemplate<String, Object> firstRedisTemplate;

 @Autowired
 RedisTemplate<String, Object> secondRedisTemplate;

 @Override
 public void run(String... args) throws Exception {
  BoundValueOperations<String, Object> op = firstRedisTemplate.boundValueOps("PERSON");
  People people = new People();
  people.setAge(26);
  people.setName("Deweixu");
  op.set(people);
  BoundValueOperations<String, Object> secondOp = secondRedisTemplate.boundValueOps("PERSON");
  People getPeople = (People) secondOp.get();
  System.out.println(getPeople.getName() + "," + getPeople.getAge());
 }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java中final的用法

    詳解Java中final的用法

    本文主要介紹了Java中final的使用方法,final是java的關(guān)鍵字,本文就詳細(xì)說(shuō)明一下它的使用方法,需要的朋友可以參考下
    2015-08-08
  • SpringBoot2種單元測(cè)試方法解析

    SpringBoot2種單元測(cè)試方法解析

    這篇文章主要介紹了SpringBoot2種單元測(cè)試方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java結(jié)構(gòu)型模式之橋接模式詳解

    Java結(jié)構(gòu)型模式之橋接模式詳解

    橋接模式是一種很實(shí)用的結(jié)構(gòu)型模式,如果系統(tǒng)中某個(gè)類存在兩個(gè)獨(dú)立變化的維度,通過(guò)橋接模式將這兩個(gè)維度分離出來(lái),使兩者可以獨(dú)立擴(kuò)展
    2023-02-02
  • Java mysql特殊形式的查詢語(yǔ)句詳解

    Java mysql特殊形式的查詢語(yǔ)句詳解

    這篇文章主要介紹了Java mysql特殊形式的查詢,包括子查詢和聯(lián)合查詢、自身連接查詢問(wèn)題,本文通過(guò)sql語(yǔ)句給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • 利用Java如何實(shí)現(xiàn)將二維數(shù)組轉(zhuǎn)化為鏈?zhǔn)絻?chǔ)存

    利用Java如何實(shí)現(xiàn)將二維數(shù)組轉(zhuǎn)化為鏈?zhǔn)絻?chǔ)存

    鏈?zhǔn)浇Y(jié)構(gòu)不要求邏輯上相鄰的節(jié)點(diǎn)在物理位置上也相鄰,節(jié)點(diǎn)間的邏輯關(guān)系是由附加的指針字段表示的,通常借助于程序設(shè)計(jì)中的指針結(jié)構(gòu)來(lái)實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于利用Java如何實(shí)現(xiàn)將二維數(shù)組轉(zhuǎn)化為鏈?zhǔn)絻?chǔ)存的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • SpringBoot加載靜態(tài)資源的方式

    SpringBoot加載靜態(tài)資源的方式

    本篇文章主要介紹了SpringBoot加載靜態(tài)資源的方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java大文件分片上傳超詳細(xì)教程(minio版)

    Java大文件分片上傳超詳細(xì)教程(minio版)

    Minio是一個(gè)開(kāi)源的分布式對(duì)象存儲(chǔ)系統(tǒng),它允許用戶在存儲(chǔ)服務(wù)上存儲(chǔ)和檢索數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Java大文件分片上傳(minio版)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • PageHelper插件實(shí)現(xiàn)一對(duì)多查詢時(shí)的分頁(yè)問(wèn)題

    PageHelper插件實(shí)現(xiàn)一對(duì)多查詢時(shí)的分頁(yè)問(wèn)題

    這篇文章主要介紹了PageHelper插件實(shí)現(xiàn)一對(duì)多查詢時(shí)的分頁(yè)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java實(shí)現(xiàn)注冊(cè)登錄跳轉(zhuǎn)

    Java實(shí)現(xiàn)注冊(cè)登錄跳轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)注冊(cè)登錄跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 詳解SpringBoot如何優(yōu)雅的進(jìn)行全局異常處理

    詳解SpringBoot如何優(yōu)雅的進(jìn)行全局異常處理

    在SpringBoot的開(kāi)發(fā)中,為了提高程序運(yùn)行的魯棒性,我們經(jīng)常需要對(duì)各種程序異常進(jìn)行處理,但是如果在每個(gè)出異常的地方進(jìn)行單獨(dú)處理的話,這會(huì)引入大量業(yè)務(wù)不相關(guān)的異常處理代碼,這篇文章帶大家了解一下如何優(yōu)雅的進(jìn)行全局異常處理
    2023-07-07

最新評(píng)論

广平县| 仙桃市| 泽库县| 绵阳市| 师宗县| 金阳县| 衡山县| 扬中市| 顺义区| 通山县| 固安县| 宜昌市| 南溪县| 建平县| 红原县| 武邑县| 林芝县| 佳木斯市| 阜宁县| 敦煌市| 渭源县| 桐庐县| 马尔康县| 绥棱县| 石阡县| 昌江| 泸州市| 新营市| 乐业县| 霸州市| 诸暨市| 襄樊市| 堆龙德庆县| 岑溪市| 包头市| 灵台县| 临颍县| 津市市| 衡阳市| 西丰县| 洪洞县|