操作redis

使用Java操作Redis數據庫

1、 建立一個jedis的Maven項目;
2、 修改pom.xml配置文件,追加相應的開發包以及插件:

<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>cn.mldn</groupId>
    <artifactId>jedis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>jedis</name>
    <url>http://maven.apache.org</url>

    <properties>
        <jedis.version>2.9.0</jedis.version>
        <junit.version>4.12</junit.version>
        <jdk.version>1.8</jdk.version>
        <compiler.version>3.6.1</compiler.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>jedisDemo</finalName>
        <plugins> 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${compiler.version}</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encode>${encoding.charset}</encode>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3、 如果要進行Redis數據庫的連接,千萬不要做地址的綁定處理。

package cn.mldn.jedis;

import redis.clients.jedis.Jedis;

public class ConnectRedisServer {
    public static final String REDIS_HOST = "192.168.125.136" ; // 主機地址
    public static final int REDIS_PORT = 6379 ; // 端口號
    public static final String REDIS_AUTH = "mldnjava" ;    // 認證密碼
    public static void main(String[] args) {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST,REDIS_PORT) ;
        jedis.auth(REDIS_AUTH) ;    // 進行REDIS訪問認證
        System.out.println(jedis.ping());
        jedis.close();
    }
}

如果此時服務器返回的內容爲 PONG ,就表示連接成功。

Jedis數據操作

Jedis如果要進行數據操作實際上與Redis使的命令是相同的,也就是說整體的Jedis處理的時候所使用的方法名稱就是命令名稱。
1、 設置字符串數據

package cn.mldn.jedis;

import redis.clients.jedis.Jedis;

public class BaseDataDemo {
    public static final String REDIS_HOST = "192.168.125.136" ; // 主機地址
    public static final int REDIS_PORT = 6379 ; // 端口號
    public static final String REDIS_AUTH = "mldnjava" ;    // 認證密碼
    public static void main(String[] args) {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST,REDIS_PORT) ;
        jedis.auth(REDIS_AUTH) ;    // 進行REDIS訪問認證
        jedis.set("user-mldn","hello") ;
        jedis.set("user-admin","happy") ;
        System.out.println(jedis.get("user-admin"));    // 獲取數據
        jedis.close();
    }
}

2、 設置有效時間的數據:

package cn.mldn.jedis;

import redis.clients.jedis.Jedis;

public class BaseExpireDataDemo {
    public static final String REDIS_HOST = "192.168.125.136" ; // 主機地址
    public static final int REDIS_PORT = 6379 ; // 端口號
    public static final String REDIS_AUTH = "mldnjava" ;    // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST,REDIS_PORT) ;
        jedis.auth(REDIS_AUTH) ;    // 進行REDIS訪問認證
        jedis.setex("code-mldn",3,"7369") ; // 該數據只保留3秒,3秒內可以使用,超過無法使用
        System.out.println("立即獲取數據:" + jedis.get("code-mldn"));
        Thread.sleep(3500);
        System.out.println("3.5秒後獲取數據:" + jedis.get("code-mldn"));
        jedis.close();
    }
}

3、 操作Hash數據:

package cn.mldn.jedis;

import redis.clients.jedis.Jedis;

public class HashDataDemo {
    public static final String REDIS_HOST = "192.168.125.136" ; // 主機地址
    public static final int REDIS_PORT = 6379 ; // 端口號
    public static final String REDIS_AUTH = "mldnjava" ;    // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST,REDIS_PORT) ;
        jedis.auth(REDIS_AUTH) ;    // 進行REDIS訪問認證
        jedis.hset("user-mldn", "name", "啊三") ;
        jedis.hset("user-mldn", "age", "18") ;
        System.out.println(jedis.hget("user-mldn", "name"));
        System.out.println(jedis.hget("user-mldn", "age"));
        jedis.close();
    }
}

4、 操作List數據:

package cn.mldn.jedis;

import redis.clients.jedis.Jedis;

public class ListDataDemo {
    public static final String REDIS_HOST = "192.168.125.136" ; // 主機地址
    public static final int REDIS_PORT = 6379 ; // 端口號
    public static final String REDIS_AUTH = "mldnjava" ;    // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST,REDIS_PORT) ;
        jedis.auth(REDIS_AUTH) ;    // 進行REDIS訪問認證
        jedis.lpush("user-admin", "database","cas","openssh","codis","tidb") ;
        jedis.rpush("user-admin", "hello","world") ;
        System.out.println(jedis.lpop("user-admin"));
        System.out.println(jedis.lpop("user-admin"));
        System.out.println(jedis.lpop("user-admin"));
        System.out.println(jedis.lpop("user-admin"));
        System.out.println(jedis.lpop("user-admin"));
        System.out.println(jedis.lpop("user-admin"));
        System.out.println(jedis.lpop("user-admin"));
        jedis.close();
    }
}

5、 取得全部List數據:

package cn.mldn.jedis;

import java.util.List;

import redis.clients.jedis.Jedis;

public class ListDataDemo2 {
    public static final String REDIS_HOST = "192.168.125.136" ; // 主機地址
    public static final int REDIS_PORT = 6379 ; // 端口號
    public static final String REDIS_AUTH = "mldnjava" ;    // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST,REDIS_PORT) ;
        jedis.auth(REDIS_AUTH) ;    // 進行REDIS訪問認證
        jedis.lpush("user-admin", "database","cas","openssh","codis","tidb") ;
        jedis.rpush("user-admin", "hello","world") ;
        List<String> all = jedis.lrange("user-admin", 0, -1) ;
        System.out.println(all);
        jedis.close();
    }
}

6、 操作Set數據:

package cn.mldn.jedis;

import java.util.Set;

import redis.clients.jedis.Jedis;

public class SetDataDemo {
    public static final String REDIS_HOST = "192.168.125.136"; // 主機地址
    public static final int REDIS_PORT = 6379; // 端口號
    public static final String REDIS_AUTH = "mldnjava"; // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT);
        jedis.auth(REDIS_AUTH); // 進行REDIS訪問認證
        jedis.sadd("user-admin", "a", "b", "c", "d", "e");
        jedis.sadd("user-mldn", "a", "c", "e", "x", "y", "z");
        Set<String> all = jedis.sinter("user-admin","user-mldn") ;
        System.out.println(all);
        jedis.close();
    }
}

7、 操作SortedSet集合

package cn.mldn.jedis;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;

public class SortedSetDataDemo {
    public static final String REDIS_HOST = "192.168.125.136"; // 主機地址
    public static final int REDIS_PORT = 6379; // 端口號
    public static final String REDIS_AUTH = "mldnjava"; // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT);
        jedis.auth(REDIS_AUTH); // 進行REDIS訪問認證
        // 定義好一個Map集合
        Map<String,Double> map = new HashMap<String,Double>() ;
        map.put("pid-1-1", 2.0) ;
        map.put("pid-1-2", 1.0) ;
        map.put("pid-2-1", 5.0) ;
        jedis.zadd("user-mldn", map) ;
        Set<String> zrangeByScore = jedis.zrangeByScore("user-mldn", 1.0, 5.0) ;
        System.out.println(zrangeByScore);
        jedis.close();
    }
}

8、 取得對應的成績數據:

package cn.mldn.jedis;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

public class SortedSetDataDemo2 {
    public static final String REDIS_HOST = "192.168.125.136"; // 主機地址
    public static final int REDIS_PORT = 6379; // 端口號
    public static final String REDIS_AUTH = "mldnjava"; // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT);
        jedis.auth(REDIS_AUTH); // 進行REDIS訪問認證
        // 定義好一個Map集合
        Map<String, Double> map = new HashMap<String, Double>();
        map.put("pid-1-1", 2.0);
        map.put("pid-1-2", 1.0);
        map.put("pid-2-1", 5.0);
        jedis.zadd("user-mldn", map);
        Set<Tuple> all = jedis.zrangeByScoreWithScores("user-mldn", 1.0, 5.0);
        Iterator<Tuple> iter = all.iterator();
        while (iter.hasNext()) {
            Tuple tuple = iter.next();
            System.out.println(
                    "元素名稱:" + tuple.getElement() + "、分數:" + tuple.getScore());
        } 
        jedis.close();
    }
}

9、 keys處理操作,使用keys可以獲取全部的key的信息。

package cn.mldn.jedis;

import java.util.Set;

import redis.clients.jedis.Jedis;

public class KeysDemo {
    public static final String REDIS_HOST = "192.168.125.136"; // 主機地址
    public static final int REDIS_PORT = 6379; // 端口號
    public static final String REDIS_AUTH = "mldnjava"; // 認證密碼
    public static void main(String[] args) throws Exception {
        // 進行Redis的連接只需要設置主機名稱和端口號即可,不需要考慮認證問題
        Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT);
        jedis.auth(REDIS_AUTH); // 進行REDIS訪問認證
        Set<String> keys = jedis.keys("user-*") ;
        System.out.println(keys);
        jedis.close();
    }
}

Jedis連接池

如果直接使用Jedis可以直接進行數據庫的操作,但是每一次的打開和關閉實在是太浪費性能了,所以爲了提升操作性能,一定要使用數據庫連接池的模式來進行處理,幸運的是Jedis開發包直接提供了數據庫連接池的操作支持。

package cn.mldn.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedsConnectionPool {
    public static final String REDIS_HOST = "192.168.125.136" ; // 主機地址
    public static final int REDIS_PORT = 6379 ; // 端口號
    public static final int TIMEOUT = 2000 ;    // 連接超時時間
    public static final String REDIS_AUTH = "mldnjava" ;    // 認證密碼
    public static final int MAX_TOTAL = 1000 ;  // 設置最大連接數
    public static final int MAX_IDLE = 200 ;    // 設置最小維持連接數
    public static final int MAX_WAIT_MILLIS = 1000 ;    // 設置最大等待時間
    public static final boolean TEST_ON_BORROW = true ; // 是否進行可用測試
    public static void main(String[] args) {
        // 首先如果要想使用Jedis連接池,則必須有一個類可以保存所有連接池相關屬性的配置項
        JedisPoolConfig poolConfig = new JedisPoolConfig() ;
        poolConfig.setMaxTotal(MAX_TOTAL);  // 設置最大連接數
        poolConfig.setMaxIdle(MAX_IDLE);    // 設置空閒的連接數
        poolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS);// 最大等待時間
        poolConfig.setTestOnBorrow(TEST_ON_BORROW); // 是否要進行連接測試,以保證返回的連接爲可用連接
        JedisPool pool = new JedisPool(poolConfig,REDIS_HOST,REDIS_PORT,TIMEOUT,REDIS_AUTH) ;
        Jedis jedis = pool.getResource() ;  // 通過連接池獲取連接對象
        jedis.set("mldn", "www.mldn.cn") ;
        jedis.close();
        pool.close();   // 關閉連接池
    }
}

SpringData與Redis集成

Redis是一款優秀的緩存數據庫,但是傳統的Redis開發有一個缺點:無法進行對象的保存。因爲對象屬於二進制的操作數據(所有的對象都可以通過Serializable進行序列化處理),所以爲了解決這樣的難題,推出了一個重要的技術:SpringData,使用SpringData可以輕鬆的實現各個數據庫中對象信息保存處理。

SpringData簡介

Redis本身數據類型:基本數據、Hash數據,在整個的Redis裏面只有這兩類數據支持有普通的數據轉換功能,例如:
- 基本數據:如果現在要求保存的數據是一個JSON結構,那麼一定可以描述出一個完整對象信息;
- HashSet數據:Hash數據本身就可以描述出各個屬性的內容。
如果要在這兩種可以保存對象的處理方案裏面進行選擇,相信大部分人絕對會選擇第一種方案,有兩個原因:
- 操作比較直觀;
- 只進行一次數據的保存即可。
如果真的使用基本數據類型進行對象的保存,實際上有兩種方案:對象序列化(速度快)、JSON處理(速度慢)。那麼現在在Spring開發框架裏面就提供有這種支持,也就是說利用Spring-Data技術就可以輕鬆的實現轉換,而SpringData的轉換原則如下:
spring data
SpringData支持各種數據庫的開發處理:spring-data-commons、spring-data-mongodb、spring-data-redis;

配置SpringData與Redis集成

1、 如果要想進行SpringData與Redis集成一定要在項目裏面配置好所有的Spring、Redis開發包。
2、 建立一個新的Maven項目:SpringDataProject;
3、 修改pom.xml配置文件:

<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>cn.mldn</groupId>
    <artifactId>springdata</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springdata</name>
    <url>http://maven.apache.org</url>

    <properties>
        <jedis.version>2.9.0</jedis.version>
        <junit.version>4.12</junit.version>
        <jdk.version>1.8</jdk.version>
        <compiler.version>3.6.1</compiler.version>
        <spring.version>4.3.8.RELEASE</spring.version>
        <spring-data.version>1.8.3.RELEASE</spring-data.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${spring-data.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>springdatademo</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${compiler.version}</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encode>${encoding.charset}</encode>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

4、 建立 src/main/profiles/dev 目錄,並且在裏面建立config/redis.properties配置文件:
- 將 src/main/profiles/dev 目錄提升爲源代碼目錄;

# 追加所有的哨兵的訪問處理地址以及對應的端口號
redis.sentinel-1.host=192.168.125.161
redis.sentinel-2.host=192.168.125.161
redis.sentinel-3.host=192.168.125.161
redis.sentinel-1.port=26379
redis.sentinel-2.port=26380
redis.sentinel-3.port=26381
# 定義哨兵的master的名稱
redis.sentinel.master.name=mymaster
# Redis的認證信息,認證信息密碼
redis.password=mldnjava
# Redis連接的超時時間
redis.timeout=2000
# 設置最大的可用連接數
redis.pool.maxTotal=100
# 最小維持的可用連接數
redis.pool.maxIdle=20
# 最大等待時間
redis.pool.maxWaitMillis=2000

5、 建立src/main/resources源文件目錄;
6、 建立spring配置文件:spring/spring-redis.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-4.3.xsd">

    <!-- 如果要進行Redis處理用戶應該不去關注具體的序列化或反序列化操作,這一切都應該交給SpringData處理 -->
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
        <property name="connectionFactory" ref="connectionFactory"/>    <!-- 定義Redis連接工廠 -->
        <property name="keySerializer"> <!-- 定義序列化Key的程序處理類 -->
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="valueSerializer">   <!-- 處理value數據的操作 -->
            <!-- 明確表示如果要進行value數據保存的時候,保存的對象一定要使用JDK提供的序列化處理類 -->
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
        </property>
        <property name="hashValueSerializer">   <!-- 處理hash數據的保存 -->
            <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
        </property>
    </bean>
    <!-- 進行所有的哨兵地址的配置項 -->
    <bean id="sentinelsConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
        <property name="master"><!-- 配置master的節點名稱 -->
            <bean class="org.springframework.data.redis.connection.RedisNode">
                <!-- 通過資源文件讀取出master的名稱進行配置 -->
                <property name="name" value="${redis.sentinel.master.name}"/>
            </bean>
        </property>
        <!-- 配置所有哨兵的連接地址信息 -->
        <property name="sentinels">
            <set>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="${redis.sentinel-1.host}"/>
                    <constructor-arg name="port" value="${redis.sentinel-1.port}"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="${redis.sentinel-2.host}"/>
                    <constructor-arg name="port" value="${redis.sentinel-2.port}"/>
                </bean>
                <bean class="org.springframework.data.redis.connection.RedisNode">
                    <constructor-arg name="host" value="${redis.sentinel-3.host}"/>
                    <constructor-arg name="port" value="${redis.sentinel-3.port}"/>
                </bean>
            </set>
        </property>
    </bean>
    <!-- 首先進行Jedis連接池的相關配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.pool.maxTotal}"/> <!-- 最大可用連接數 -->
        <property name="maxIdle" value="${redis.pool.maxIdle}"/>   <!-- 最小維持連接數 -->
        <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"/>   <!-- 最大等待時間 -->
    </bean>
    <!-- 進行ConnectionFactory的配置 -->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <constructor-arg name="sentinelConfig" ref="sentinelsConfiguration"/>
        <property name="poolConfig" ref="jedisPoolConfig"/> <!-- 引用進行連接池的配置項 -->
        <property name="password" value="${redis.password}"/>  <!-- 定義的是連接密碼,認證密碼 -->
    </bean>
</beans>

定義config/spring-common.xml配置文件:

<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>cn.mldn</groupId>
    <artifactId>springdata</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springdata</name>
    <url>http://maven.apache.org</url>

    <properties>
        <jedis.version>2.9.0</jedis.version>
        <junit.version>4.12</junit.version>
        <jdk.version>1.8</jdk.version>
        <compiler.version>3.6.1</compiler.version>
        <spring.version>4.3.8.RELEASE</spring.version>
        <spring-data.version>1.8.3.RELEASE</spring-data.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>${jedis.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>${spring-data.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>springdatademo</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${compiler.version}</version>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encode>${encoding.charset}</encode>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

SpringData序列化與反序列化對象

本次直接使用Spring-Test進行項目測試,可以進行資源的自動注入,主要使用的就是redisTemplate資源。
1、 建立一個VO類:Member

package cn.mldn.springdata.vo;

import java.io.Serializable;
import java.util.Date;

@SuppressWarnings("serial")
public class Member implements Serializable {
    private String mid ;
    private String name ;
    private Integer age ;
    private Date birthday ;
    private Double salary ;
}

2、 編寫測試程序來實現SpringData數據處理:

package cn.mldn.springdata;

import java.util.Date;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import cn.mldn.springdata.vo.Member;

@ContextConfiguration(locations = {"classpath:spring/spring-common.xml"})
@RunWith(SpringJUnit4ClassRunner.class) // 使用Junit進行測試
public class TestMember {
    @Resource
    private RedisTemplate<String, Object> redisTemplate; // 序列化操作模版
    @Test
    public void testLoad() {
        Object obj = this.redisTemplate.opsForValue().get("mldn-1"); // 要進行轉型處理
        System.out.println(obj);
    }
    @Test
    public void testSave() { // 數據保存處理
        Member vo = new Member();
        vo.setMid("mldn-java");
        vo.setBirthday(new Date());
        vo.setName("張三");
        vo.setAge(18);
        vo.setSalary(1.1);
        this.redisTemplate.opsForValue().set("mldn-1", vo);
    }
    @Test
    public void testMultiSave() throws Exception { // 數據保存處理
        for (int x = 0; x < 10000; x++) {
            Member vo = new Member();
            vo.setMid("mldn-java");
            vo.setBirthday(new Date());
            vo.setName("張三");
            vo.setAge(18);
            vo.setSalary(1.1);
            this.redisTemplate.opsForValue().set("mldn-" + x, vo);
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章