Jedis的使用

轉載自:http://blog.csdn.net/jesting1988/article/details/55803915


一:導入依賴

         <dependency>

               <groupId>Redis.clients</groupId>

               <artifactId>jedis</artifactId>

               <version>2.6.0</version>

         </dependency>

二:簡單示例

public class JedisDemo{

        public static void main(String [ ] args){

             //創建jedis對象

            Jedis jedis=new Jedis("127.0.0.1",6379);

            //向redis中添加數據

            jedis.set("mytest","123");

            //從redis中讀取數據

            String value=jedis.get("mytest");

           //關閉連接

           jedis.close();

        }

}

三:連接池的使用

public class JedisPoolDemo{

        public static void main(String [] args){

              //構建連接池配置信息

             JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();

             //設置最大連接數

             jedisPoolConfig.setMaxTotal(50);

            //從連接池中獲取連接

            Jedis jedis=jedisPool.getResource();

            //從redis中讀取數據

            String value=jedis.get("mytest");

             //將連接還到連接池中

            jedisPool.returnResource(jedis);

            //釋放連接池

            jedisPool.close();

        }

}

四:分片式集羣的使用

1.1.1.  分片式集羣的使用

publicclass ShardedJedisPoolDemo {

 

    publicstaticvoid main(String[]args) {

        // 構建連接池配置信息

        JedisPoolConfig poolConfig =new JedisPoolConfig();

        // 設置最大連接數

        poolConfig.setMaxTotal(50);

 

        // 定義集羣信息

        List<JedisShardInfo> shards =newArrayList<JedisShardInfo>();

        shards.add(new JedisShardInfo("127.0.0.1", 6379));

        shards.add(new JedisShardInfo("192.168.29.112", 6379));

 

        // 定義集羣連接池

        ShardedJedisPool shardedJedisPool =new ShardedJedisPool(poolConfig,shards);

        ShardedJedis shardedJedis =null;

        try {

            // 從連接池中獲取到jedis分片對象

            shardedJedis = shardedJedisPool.getResource();

           

//           for (int i = 0; i < 100;i++) {

//               shardedJedis.set("key_" + i, "value_" + i);

//           }

 

           System.out.println(shardedJedis.get("key_49"));

            System.out.println(shardedJedis.get("key_7"));

 

        catch (Exceptione) {

            e.printStackTrace();

        finally {

            if (null !=shardedJedis) {

               // 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態

               shardedJedis.close();

            }

        }

 

        // 關閉連接池

        shardedJedisPool.close();

 

    }

}

五:將jedis集成到項目中

(一)添加依賴

<dependency>

               <groupId>redis.clients</groupId>

               <artifactId>jedis</artifactId>

               <version>2.6.0</version>

         </dependency>

(二)spring和jedis的整合

<!—連接池的配置-->

<bean id =”jedisPoolConfig” class=”redis.clients.jedis.JedisPoolConfig”>

         <!—設置最大連接數-->

         <propertyname=”maxTotal” value=”${redis.maxTotal}”/>

<!--分片式連接池-->

<bean class=”redis.clients.jedis.ShardedJedisPool”>

<constructor-argindex=”0” ref=”jedisPoolConfig”/>

         <constructor-argindex=”1”>

                   <list>

                            <beanclass=”redis.clients.jedis.JedisSharedInfo”>

                                     <constructor-argindex=”0” value=”${redis.node1.ip}”/>

                                     <constructor-argindex=”1” value=”${redis.node1.port}”/>

                            </bean>

                   </list>

         </constructor-arg>

</bean>

 (三)封裝redisService

1.1.1.  封裝RedisService

package com.taotao.manage.service;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import redis.clients.jedis.ShardedJedis;

import redis.clients.jedis.ShardedJedisPool;

 

@Service

publicclass RedisService {

 

    @Autowired

    private ShardedJedisPoolshardedJedisPool;

 

    /**

     執行set操作

     *

     @param key

     @param value

     @return

     */

    public String set(Stringkey, String value) {

        ShardedJedis shardedJedis =null;

        try {

            // 從連接池中獲取到jedis分片對象

            shardedJedis = shardedJedisPool.getResource();

            returnshardedJedis.set(key,value);

        finally {

            if (null !=shardedJedis) {

               // 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態

               shardedJedis.close();

            }

        }

    }

 

    /**

     執行get操作

     *

     @param key

     @return

     */

    public String get(Stringkey) {

        ShardedJedis shardedJedis =null;

        try {

            // 從連接池中獲取到jedis分片對象

            shardedJedis = shardedJedisPool.getResource();

            returnshardedJedis.get(key);

        finally {

            if (null !=shardedJedis) {

               // 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態

               shardedJedis.close();

            }

        }

    }

 

}

(四)優化redisservice

定義接口

public interface Function<T,E>{

      public T callback(E,e);

}

RedisService的實現:

 

package com.taotao.manage.service;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import redis.clients.jedis.ShardedJedis;

import redis.clients.jedis.ShardedJedisPool;

 

@Service

publicclass RedisService {

 

    @Autowired

    private ShardedJedisPoolshardedJedisPool;

 

    private <T> Texecute(Function<T, ShardedJedis>fun) {

        ShardedJedis shardedJedis =null;

        try {

            // 從連接池中獲取到jedis分片對象

            shardedJedis = shardedJedisPool.getResource();

            returnfun.callback(shardedJedis);

        finally {

            if (null !=shardedJedis) {

               // 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態

               shardedJedis.close();

            }

        }

    }

 

    /**

     執行set操作

     *

     @param key

     @param value

     @return

     */

    public String set(final String keyfinal Stringvalue) {

        returnthis.execute(new Function<String, ShardedJedis>() {

            @Override

            public String callback(ShardedJedise) {

               returne.set(key,value);

            }

        });

    }

 

    /**

     執行get操作

     *

     @param key

     @return

     */

    public String get(final String key) {

        returnthis.execute(new Function<String, ShardedJedis>() {

            @Override

            public String callback(ShardedJedise) {

               returne.get(key);

            }

        });

    }

 

    /**

     執行刪除操作

     *

     @param key

     @return

     */

    public Long del(final String key) {

        returnthis.execute(new Function<Long, ShardedJedis>() {

            @Override

            public Long callback(ShardedJedise) {

               returne.del(key);

            }

        });

    }

 

    /**

     設置生存時間,單位爲:秒

     *

     @param key

     @param seconds

     @return

     */

    public Long expire(final String keyfinal Integerseconds) {

        returnthis.execute(new Function<Long, ShardedJedis>() {

            @Override

            public Long callback(ShardedJedise) {

               returne.expire(key,seconds);

            }

        });

    }

 

    /**

     執行set操作並且設置生存時間,單位爲:秒

     *

     @param key

     @param value

     @return

     */

    public String set(final String keyfinal Stringvaluefinal Integerseconds) {

        returnthis.execute(new Function<String, ShardedJedis>() {

            @Override

            public String callback(ShardedJedise) {

               String str = e.set(key,value);

               e.expire(key,seconds);

               returnstr;

            }

        });

    }

}

 

(五)實現緩存邏輯

1.先從緩存中命中,命中則返回

2.沒有命中則把結果放入緩存中

public ItemCatResult queryItemCatList(){

      //從緩存中命中

       String key=“REDIS_KEY”;

       String cacheData=this.redisService.get(key);

       if(StringUtils.isNotEmpty(cacheData)){

            try{

             return MAPPER.readValue(cacheData,ItemCatResult.class);

            }cache(Exception e){

                  e.printStatckTrace();

            }

      }

     //如果沒有命中,則從數據庫中查找,並把結果寫入緩存中

    try{

          //將結果集寫入到緩存中

         this.redisService.set(REDIS_KEY,MAPPER.writerValueAsString(result),REDIS_TIME);

    }cache(Exception e){

       e,printStatckTrace();

     }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章