• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Spring Data Redis 單節點和集群配置和RedisTemplate用法

    標簽: Spring Data Redis 單節點和集群配置和Red

    使用SpringData更加方便我們對關系型數據庫和非關系型數據庫更好的操作,封裝了通用的代碼,使得操作更加快捷簡單。

    一、Spring Data Redis的配置

    引入相關jar包,注意依賴和沖突問題。
    maven 引入pom.xml:
    
    • 1
    • 2
    • 3
    <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
        </dependency>
    
        <!--spring-data-redis相關,會自動引入相關jar-->
        <dependency>
          <groupId>org.springframework.data</groupId>
          <artifactId>spring-data-redis</artifactId>
          <version>1.7.4.RELEASE</version>
        </dependency>
    
        <!--spring測試相關-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>4.2.8.RELEASE</version>
        </dependency>
    
        <!--redis相關-->
        <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.9.0</version>
        </dependency>
      </dependencies>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    手動添加jar包 相關jar下載地址

    這里寫圖片描述

    配置文件

    可以使用引入外部文件的方式也可以通過在xml文件中配置的方式
    
    • 1
    • 2

    單節點配置方式

    properties文件

    #JedisPoolConfig的參數
    #最大連接數
    redis.pool.maxTotal=30
    #最大空閑時間
    redis.pool.maxIdle=10
    #每次最大連接數
    redis.pool.numTestsPerEvictionRun=1024
    #釋放掃描的掃描間隔
    redis.pool.timeBetweenEvictionRunsMillis=30000
    #連接的最小空閑時間
    redis.pool.minEvictableIdleTimeMillis=1800000
    #連接控歘按時間多久后釋放,當空閑時間>該值且空閑連接>最大空閑連接數時直接釋放
    redis.pool.softMinEvictableIdleTimeMillis=10000
    #獲得鏈接時的最大等待毫秒數,小于0:阻塞不確定時間,默認-1
    redis.pool.maxWaitMillis=1500
    #在獲得鏈接的時候檢查有效性,默認false
    redis.pool.testOnBorrow=true
    #在空閑時檢查有效性,默認false
    redis.pool.testWhileIdle=true
    #連接耗盡時是否阻塞,false報異常,true阻塞超時,默認true
    redis.pool.blockWhenExhausted=false
    
    #JedisConnectionFactory的參數
    #主機地址,默認:localhost
    redis.hostName=192.168.200.128
    #主機端口,默認:6379
    redis.port=6379
    #超時時間,默認:2000
    redis.timeout=3000
    #密碼
    #redis.password
    #是否使用連接池,默認true
    redis.usePool=true
    #使用數據庫的索引,0-15之間的數字,默認:0
    redis.dbIndex=0
    #是否使用數據類型的轉換,默認:true
    #redis.convertPipelineAndTxResults
    #哨兵配置
    #redis.sentinelConfig
    #集群配置
    #redis.clusterConfig
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
        <!--引入配置文件-->
        <bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="order" value="1"/>
            <property name="ignoreUnresolvablePlaceholders" value="true"/>
            <property name="locations">
                <list>
                    <value>classpath:redis.properties</value>
                </list>
            </property>
        </bean>
    
        <!--配置 jedis pool-->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <!-- 最大連接數 -->
            <property name="maxTotal" value="${redis.pool.maxTotal}"/>
            <!-- 最大空閑時間 -->
            <property name="maxIdle" value="${redis.pool.maxIdle}"/>
            <!-- 每次最大連接數 -->
            <property name="numTestsPerEvictionRun" value="${redis.pool.numTestsPerEvictionRun}"/>
            <!-- 釋放掃描的掃描間隔 -->
            <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}"/>
            <!-- 連接的最小空閑時間 -->
            <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}"/>
            <!-- 連接控歘按時間多久后釋放,當空閑時間>該值且空閑連接>最大空閑連接數時直接釋放 -->
            <property name="softMinEvictableIdleTimeMillis" value="${redis.pool.softMinEvictableIdleTimeMillis}"/>
            <!-- 獲得鏈接時的最大等待毫秒數,小于0:阻塞不確定時間,默認-1 -->
            <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/>
            <!-- 在獲得鏈接的時候檢查有效性,默認false -->
            <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
            <!-- 在空閑時檢查有效性,默認false -->
            <property name="testWhileIdle" value="${redis.pool.testWhileIdle}"/>
            <!-- 連接耗盡時是否阻塞,false報異常,true阻塞超時 默認:true-->
            <property name="blockWhenExhausted" value="${redis.pool.blockWhenExhausted}"/>
        </bean>
    
        <!--spring data redis -->
        <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <property name="hostName" value="${redis.hostName}"/>
            <property name="port" value="${redis.port}"/>
            <property name="timeout" value="${redis.timeout}"/>
            <property name="database" value="${redis.dbIndex}"/>
            <property name="usePool" value="${redis.usePool}"/>
            <!--可以通過構造注入或者Set注入兩種方式-->
            <property name="poolConfig" ref="jedisPoolConfig"/>
        </bean>
    
        <!--redisTemplate-->
        <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
            <property name="connectionFactory" ref="jedisConnectionFactory"/>
        </bean>
    
    </beans>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    集群配置方式 
    properties文件

    #JedisPoolConfig的參數
    #最大連接數
    redis.pool.maxTotal=30
    #最大空閑時間
    redis.pool.maxIdle=10
    #每次最大連接數
    redis.pool.numTestsPerEvictionRun=1024
    #釋放掃描的掃描間隔
    redis.pool.timeBetweenEvictionRunsMillis=30000
    #連接的最小空閑時間
    redis.pool.minEvictableIdleTimeMillis=1800000
    #連接控歘按時間多久后釋放,當空閑時間>該值且空閑連接>最大空閑連接數時直接釋放
    redis.pool.softMinEvictableIdleTimeMillis=10000
    #獲得鏈接時的最大等待毫秒數,小于0:阻塞不確定時間,默認-1
    redis.pool.maxWaitMillis=1500
    #在獲得鏈接的時候檢查有效性,默認false
    redis.pool.testOnBorrow=true
    #在空閑時檢查有效性,默認false
    redis.pool.testWhileIdle=true
    #連接耗盡時是否阻塞,false報異常,true阻塞超時,默認true
    redis.pool.blockWhenExhausted=false
    #RedisClusterConfiguration配置
    redis.maxRedirects=5
    #主機和端口號
    redis.host1=192.168.200.128
    redis.port1=7000
    redis.host2=192.168.200.128
    redis.port2=7001
    redis.host3=192.168.200.128
    redis.port3=7002
    redis.host4=192.168.200.128
    redis.port4=7003
    redis.host5=192.168.200.128
    redis.port5=7004
    redis.host6=192.168.200.128
    redis.port6=7005
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
        <!--引入配置文件-->
        <bean id="placeholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="order" value="1"/>
            <property name="ignoreUnresolvablePlaceholders" value="true"/>
            <property name="locations">
                <list>
                    <value>classpath:redis-cluster.properties</value>
                </list>
            </property>
        </bean>
    
        <!--配置 jedis pool-->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <!-- 最大連接數 -->
            <property name="maxTotal" value="${redis.pool.maxTotal}"/>
            <!-- 最大空閑時間 -->
            <property name="maxIdle" value="${redis.pool.maxIdle}"/>
            <!-- 每次最大連接數 -->
            <property name="numTestsPerEvictionRun" value="${redis.pool.numTestsPerEvictionRun}"/>
            <!-- 釋放掃描的掃描間隔 -->
            <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}"/>
            <!-- 連接的最小空閑時間 -->
            <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}"/>
            <!-- 連接控歘按時間多久后釋放,當空閑時間>該值且空閑連接>最大空閑連接數時直接釋放 -->
            <property name="softMinEvictableIdleTimeMillis" value="${redis.pool.softMinEvictableIdleTimeMillis}"/>
            <!-- 獲得鏈接時的最大等待毫秒數,小于0:阻塞不確定時間,默認-1 -->
            <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/>
            <!-- 在獲得鏈接的時候檢查有效性,默認false -->
            <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
            <!-- 在空閑時檢查有效性,默認false -->
            <property name="testWhileIdle" value="${redis.pool.testWhileIdle}"/>
            <!-- 連接耗盡時是否阻塞,false報異常,true阻塞超時 默認:true-->
            <property name="blockWhenExhausted" value="${redis.pool.blockWhenExhausted}"/>
        </bean>
    
    
        <!--配置RedisClusterConfiguration-->
        <bean id="redisClusterConfiguration" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
            <property name="maxRedirects" value="${redis.maxRedirects}"></property>
            <property name="clusterNodes">
                <set>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="${redis.host1}"/>
                        <constructor-arg name="port" value="${redis.port1}"/>
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="${redis.host2}"/>
                        <constructor-arg name="port" value="${redis.port2}"/>
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="${redis.host3}"/>
                        <constructor-arg name="port" value="${redis.port3}"/>
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="${redis.host4}"/>
                        <constructor-arg name="port" value="${redis.port4}"/>
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="${redis.host5}"/>
                        <constructor-arg name="port" value="${redis.port5}"/>
                    </bean>
                    <bean class="org.springframework.data.redis.connection.RedisNode">
                        <constructor-arg name="host" value="${redis.host6}"/>
                        <constructor-arg name="port" value="${redis.port6}"/>
                    </bean>
                </set>
            </property>
        </bean>
    
        <!--配置JedisConnectionFactory-->
        <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
            <constructor-arg name="clusterConfig" ref="redisClusterConfiguration"/>
        </bean>
    
        <!--redisTemplate-->
        <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
            <property name="connectionFactory" ref="jedisConnectionFactory"/>
        </bean>
    
    </beans>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    二、RedisTemplate的用法

    1. Operations

          opsForXXX和boundXXXOps的區別?
      XXX為Value的類型,前者獲取一個operator,但是沒有指定操作的對象(key),可以在一個連接(事務)內操作多個key以及對應的value;后者獲取了一個指定的對象(key)的operator,在一個連接(事務)內只能操作這個對應的key。
          關于計數API(increment)中有個小問題需要注意,通過increment計數后,通過get方式獲取計數值的時候可能會拋出EOF異常(和本地的jdk以及redis的編譯版本有關),可以考慮使用boundValueOps(key).get(0,-1)獲得計數值。
      
      • 1
      • 2
      • 3
      • 4
    2. ValueOperations和BoundValueOperations

      ValueOperations operations = redisTemplate.opsForValue();
              String key = "XXX";
              BoundValueOperations boundValueOperations = redisTemplate.boundValueOps(key);
      • 1
      • 2
      • 3
      類:ValueOperations可以理解為:Map<Object,Object>
      方法:set(key,value)保存
            get(key)獲取
      類:BoundValueOperations可以理解為,預先設置好了Key,可以對此key進行其他操作,如設置value,修改value,獲得value等
      
      • 1
      • 2
      • 3
      • 4
      • 5

      簡單示例:

      ValueOperations operations = redisTemplate.opsForValue();
      String key = "name";
      //存入key-value
      operations.set("name","zhangsan");
      //根據key取出Value
      Object name = operations.get("name");
      System.out.println("name:"+name);
      //追加
      operations.append("name","is man");
      //獲得并修改
      operations.getAndSet("name","zhangsan-1");
      Object name1 = operations.get("name");
      System.out.println("修改后:"+name1);
      
      String key = "name-1";
      BoundValueOperations boundValueOperations = redisTemplate.boundValueOps(key);
      //和ValueOperations類似
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    3. ListOperations 和 BoundListOperations

       ListOperations listOperations = redisTemplate.opsForList();
          String key = "springData";
          BoundListOperations boundListOperations = redisTemplate.boundListOps(key);
      • 1
      • 2
      • 3
      類:ListOperations可以理解為:List<Object>
      BoundListOperations可以理解為,預先設置好了Key,可以對此key進行其他操作,如設置value,修改value,獲得value等
      
      • 1
      • 2
      • 3

      簡單示例:

      ListOperations listOperations = redisTemplate.opsForList();
      
      //push鍵值對
      listOperations.leftPush(key,"aaa");
      listOperations.leftPush(key,"bbb");
      
      listOperations.index(1,1000);
      
      //pop值
      Object leftPop = listOperations.leftPop(key);
      System.out.println(leftPop);
      listOperations.set(key,100,"測試數據");
      
      //ListOperations可以設置泛型
      ListOperations<String,Integer> listOperations1 = redisTemplate.opsForList();
      
      String key = "springData";
      BoundListOperations boundListOperations = redisTemplate.boundListOps(key);
      //和ListOperations類似
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
    4. SetOperations 和 BoundSetOperations

      SetOperations setOperations = redisTemplate.opsForSet();
          String key = "springData";
          BoundSetOperations boundSetOperations = redisTemplate.boundSetOps(key);
      • 1
      • 2
      • 3
      類:SetOperations可以理解為:Set<Object>
      BoundSetOperations可以理解為,預先設置好了Key,可以對此key進行其他操作,如設置value,修改value,獲得value等
      
      • 1
      • 2
      • 3

      簡單示例和解釋:

      /**
       * Set集合,類似于
       *
       *  Map<Object, Set<Object>> map = new HashMap<Object, Set<Object>>();
       *  Set<Object> set = new HashSet<Object>();
       */
      @Test
      public void test04(){
          SetOperations setOperations = redisTemplate.opsForSet();
      
          /**
           * 添加,類似于
           *
           *  Map<Object, Set<Object>> map = new HashMap<Object, Set<Object>>();
           *  Set<Object> set = new HashSet<Object>();
           *  map.put(key,set);
           *  Set<Object> set = map.get(key);
           *  set.add(value);
           */
          setOperations.add("springData","redis");
          //獲取
          Set springData = setOperations.members("springData");
      
          //獲取兩個key的value(Set)交集
          setOperations.intersect("springData","SpringData1");
      
          //獲取兩個key的value(Set)補集
          setOperations.difference("springData","SpringData1");
      
          //獲取兩個key的value(Set)并集
          setOperations.union("springData","SpringData1");
      
          String key = "springData";
          BoundSetOperations boundSetOperations = redisTemplate.boundSetOps(key);
          //和SetOperations操作類似
      }
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
    5. ZSetOperations 和 BoundZSetOperations

      ZSetOperations zSetOperations = redisTemplate.opsForZSet();
          String key = "springData";
          BoundZSetOperations boundZSetOperations = redisTemplate.boundZSetOps(key);
      • 1
      • 2
      • 3
      類:SetOperations可以理解為:Set<Object>
              BoundSetOperations可以理解為,預先設置好了Key,可以對此key進行其他操作,如設置value,修改value,獲得value等
      
      • 1
      • 2
      • 3
    6. HashOperations 和 BoundHashOperations

          HashOperations hashOperations = redisTemplate.opsForHash();
          String key = "springData";
          BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(key);
      • 1
      • 2
      • 3
    版權聲明:本文為educast原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/educast/article/details/80422561

    智能推薦

    spring-data-redis

    GitHub:https://github.com/asd821300801/Redis-Java-Client-Jedis/tree/spring-data-redis Spring 集成 Redis spring-data-redis針對jedis提供了如下功能: 連接池自動管理,提供了一個高度封裝的“RedisTemplate”類 針對jedis客戶端中大量api進行...

    Spring Data 教程 - Redis

    1. Redis簡介 Redis(Remote Dictionary Server ),即遠程字典服務,是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value 數據庫,并提供多種語言的API。Redis 是一個高性能的key-value數據庫。 redis的出現,在部分場合可以對關系數據庫起到很好的補充作用。它提供了Java,C/C++,C#,PHP,Ja...

    Spring Data Redis

    Spring Data Redis 簡介 Spring-data-redis 是 spring 大家族的一部分,提供了在 srping 應用中通過簡單的配置訪問 redis 服務,對 reids 底層開發包(Jedis, JRedis, and RJC)進行了高度封裝,RedisTemplate 提供了 redis 各種操作、異常處理及序列化,支持發布訂閱,并對 spring 3.1 cache ...

    spring-data-redis

    一、什么是spring_data_redis? Spring-data-redis是spring大家族的一部分,提供了在srping應用中通過簡單的配置訪問redis服務,對reids底層開發包(Jedis, JRedis, and RJC)進行了高度封裝,RedisTemplate提供了redis各種操作、異常處理及序列化,支持發布訂閱,并對spring 3.1 cache進行了實現。 二、關于...

    Spring Data Redis(九)

    Spring Data Redis 一、 Spring Data Redis 簡介 Spring Data Redis與 Spring Data家族的其他數據操作如:Spring Data JDBC,以類似的結構進行封裝,降低用戶的學習成本;只要使用過其中一種Spring Data技術,對其他的數據源操作能依葫蘆畫瓢的進行。 二、 Redis 安裝 1 安裝環境 Redis 版本:3.0.0 環境...

    猜你喜歡

    Redis____Spring Data Redis

    5.2.2.Spring Data Redis 官網:http://projects.spring.io/spring-data-redis/ Spring Data Redis,是Spring Data 家族的一部分。 對Jedis客戶端進行了封裝,與spring進行了整合。可以非常方便的來實現redis的配置和操作。 5.2.3.RedisTemplate基本操作 Spring Data Re...

    spring-data-redis之RedisTemplate之Demo測試

    同樣奉上demo測試架構圖,架構配置文件在上一篇文章,讀者自行翻閱:   先搭建測試類:     第一種數據類型:key-value類型   第二種數據類型:Set類型   第三種數據類型:List類型   第四種數據類型:hash類型               &n...

    hive 導出數據之一列多行,轉為一行多列

    需求:提取數據 說明:原數據是一列多行,需要轉化為一行多列 待查詢表為:temp_05 待查詢數據為: 待查詢數據如圖: 需要提取的數據表頭如下: 預定日期 昨日價格 前天價格 2018-02-01 2018-02-02 2018-02-03 2018-02-04 可用提數 SQL 數據如圖: 以下為嘗試過程 數據如圖: 數據如圖: 數據如圖: 數據如圖:...

    asp.net做一個簡易的聊天室

    要求: 結果: 關鍵代碼: Default.aspx Default.aspx.cs Default2.aspx Default2.aspx.cs Default3.aspx Default3.aspx.cs Default4.aspx...

    動態SQL和多表關聯-筆記

    《動態SQL與多表關聯》筆記 學習目標 能夠使用動態SQL完成SQL拼接 能夠使用resultMap完成多表查詢 能夠使用一對一查詢 能夠使用一對多查詢 (注:多對多其實就是兩個一個多) 映射文件:為什么要resultMap 目標 定義結果映射 使用結果映射 回顧 在mybatis中有2種配置文件: 核心配置文件,如:sqlMapConfig.xml 實體類映射文件,如:UserMapper.xm...

    精品国产乱码久久久久久蜜桃不卡