1. 程式人生 > >java程式碼中操作Redis:單機redis、叢集redis(spring+redis整合)

java程式碼中操作Redis:單機redis、叢集redis(spring+redis整合)

一、準備

  1. 關於redis的一些安裝,可以檢視我的幾篇文章自行安裝:Redis目錄
  2. 匯入java的Redis客戶端依賴包Jedis:
    <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>


二、單機Redis

  1. 簡單單機用程式碼測試:
    Jedis jedis = new Jedis("localhost");
    jedis.set("foo", "bar");
    String value = jedis.get("foo");

三、程式碼中連線redis叢集

//使用jedis在程式碼中連線redis叢集,因為是叢集,可以自動發現,也同樣只要一個地址就行了
        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
        //Jedis Cluster will attempt to discover cluster nodes automatically
        jedisClusterNodes.add(new HostAndPort("192.168.240.142", 6379));
        JedisCluster jc = new JedisCluster(jedisClusterNodes);
        jc.set("foo", "bar");
        String value = jc.get("foo");
        System.out.println(value);
執行後發現可以正常取到:

用redis客戶端到redis叢集中檢視驗證,存入時我們連線的是142,此時我們在144上進行驗證:


四、spring-data-redis連線redis叢集

因為實際中我們不可能每次使用的時候都去new一下,然後連線,所以這邊推薦使用spring整合redis,並且使用較新的包(版本較低的可能不支援redis叢集)。

  1. 匯入jedis包後,還要匯入spring-data-redis:
    <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-redis</artifactId>
                <version>1.7.2.RELEASE</version>
            </dependency>



  2. 建立一個redisCluster.properties:
    #redis setting
    redis.host1=192.168.240.142
    redis.port1=6379
    
    #jedis setting
    jedis.maxIdle=6
    jedis.minEvictableIdleTimeMillis=300000
    jedis.numTestsPerEvictionRun=3
    jedis.timeBetweenEvictionRunsMillis=60000



  3. 建立一個spring-redisCluster.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" xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
           default-lazy-init="true">
    
        <context:component-scan base-package="com.spring.demo.redis" />
    
        <!-- 引入redis配置檔案 -->
        <context:property-placeholder location="classpath:redisCluster.properties" />
    
        <!-- 連線池配置 -->
        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <!-- 連線池中最大空閒的連線數 -->
            <property name="maxIdle" value="${jedis.maxIdle}"></property>
            <!-- 連線空閒的最小時間,達到此值後空閒連線將可能會被移除。負值(-1)表示不移除. -->
            <property name="minEvictableIdleTimeMillis" value="${jedis.minEvictableIdleTimeMillis}"></property>
            <!-- 對於“空閒連結”檢測執行緒而言,每次檢測的連結資源的個數。預設為3 -->
            <property name="numTestsPerEvictionRun" value="${jedis.numTestsPerEvictionRun}"></property>
            <!-- “空閒連結”檢測執行緒,檢測的週期,毫秒數。如果為負值,表示不執行“檢測執行緒”。預設為-1. -->
            <property name="timeBetweenEvictionRunsMillis" value="${jedis.timeBetweenEvictionRunsMillis}"></property>
        </bean>
    
        <!-- 叢集配置 -->
        <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
            <constructor-arg>
                <set>
                    <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="${redis.host1}"/>
                    <constructor-arg name="port" value="${redis.port1}"/>
                </bean>
                </set>
            </constructor-arg>
            <constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
        </bean>
    </beans>


  4. 新建一個 RedisClusterUtils.class用來存放一些統一的redis叢集操作:
    package com.spring.demo.redis;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    import redis.clients.jedis.JedisCluster;
    
    import java.util.List;
    
    @Component
    public class RedisClusterUtils {
    
        @Autowired
        private JedisCluster jedisCluster;
    
        /**
         * 得到指定key值的value
         * @param key
         */
        public Object get(String key){
            return jedisCluster.get(key);
        }
    
        /**
         * 儲存指定key值的value
         * @param key
         * @param value
         */
        public void set(String key, String value){
            jedisCluster.set(key, value);
        }
    
        /**
         * 儲存指定key值的value
         * @param key
         * @param list
         */
        public void set(String key, List<String> list){
            jedisCluster.rpush(key, (String[]) list.toArray());
        }
    
        /**
         * 刪除指定key的value
         * @param key
         */
        public void del(String key){
            jedisCluster.del(key);
        }
    }
    


  5. 程式碼執行驗證:
            //spring整合redis叢集
            ApplicationContext ctx = new ClassPathXmlApplicationContext("/spring-redisCluster.xml");
            RedisClusterUtils redisClusterUtils = (RedisClusterUtils) ctx.getBean("redisClusterUtils");
            redisClusterUtils.set("redisCluster", "RedisClusterUtils");
            System.out.println(redisClusterUtils.get("redisCluster"));



  6. 客戶端命令列連線叢集驗證,這次我們選擇143進行驗證

五、資料地址: