redis的簡單使用

一. redis的安裝和調試就不做介紹,這樣的文章已經很多了

二. redis在Java開發中的一些實用心得

言歸正傳:

     redis集成在spring框架中

     需要的jar包 :

      spring-data-redis-1.5.1.RELEASE.jar

     jedis-2.6.0.jar

    spring系列jar包最好用4.0.9及以上

   redis的xml文件:

     applicationContext-redis.xml

---------------------------------------------------------------applicationContext-redis.xml----------begin----------------------------------

       <?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:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="  
            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">

    <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true" />
    
    <!-- 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="minIdle" value="${redis.pool.minIdle}" />
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
    </bean>
 
    <!-- Jedis ConnectionFactory 數據庫連接配置-->
    <bean id="jedisConnectionFactory"
       class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"   >
      <!--  <constructor-arg ref="sentinelConfig" /> -->
         <property name="hostName" value="${redis.hostname}" />
        <property name="port" value="${redis.port}" />
<!--         <property name="password" value="${redis.password}" /> -->
        <property name="poolConfig" ref="jedisPoolConfig" />
    </bean>
    
    <bean id="redisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
    
    <bean id="redisTemplate"  class="org.springframework.data.redis.core.RedisTemplate"  p:connection-factory-ref="jedisConnectionFactory" >
        <property name="keySerializer" ref="redisSerializer"/>
        <property name="valueSerializer" ref="redisSerializer"/>
        <property name="hashKeySerializer" ref="redisSerializer"/>
        <property name="hashValueSerializer" ref="redisSerializer"/>
    </bean>
</beans>

    -------------------------------------------------------------------------applicationContext-redis.xml------------end-----------------

    redis.properties   配置文件

------------------------------------------------------------------------------------------redis.properties------begin--------------------------------

     #redis config
       redis.pool.maxTotal=100
       redis.pool.minIdle=20
       redis.pool.maxIdle=50
       redis.pool.testOnBorrow=true
     #redis.hostname=
       redis.hostname=127.0.0.1
       redis.port=6379
       redis.password=

 -----------------------------------------------------------------------------------------redis.properties-------end----------------------------------

示例:

主要作用爲:  redis是一種nosql數據庫, redis存儲數據的方式爲key-value ,redis處理字符串更高效

     不要再把關係型數據庫的對象模型強塞入redis中,會導致存儲空間使用率和處理效率低下,

  如下展示 核心思想是 把Java中的對象 改造爲hash存儲 , list列表轉換爲set集合方式讀取

 同時 redis提供高效率的IO操作,單個數據操作對象最好不要超過1兆大小


FavRedis.class

業務邏輯類

-----------------------------------------------------------FavRedis.class--------begin-----------------------------------------------------------

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import cust.fav.vo.FavIn;
import cust.fav.vo.Info;

@Service
public class FavRedis {
    private static Logger log = Logger.getLogger("REDIS_LOG");
    @Resource
    private RedisTemplate redisTemplate;

    // 進行添加
    @SuppressWarnings("unchecked")
    public boolean addFav(FavIn FavIn) throws Exception {
        boolean flag = true;
        log.info("增加,開始");
        String key4Set = InfoUtil4Redis.makeKey4Set(FavIn.getUserId());// 用戶鍵
        String key4Hash = InfoUtil4Redis.makeKey4Has(FavIn.getUserId(), FavIn.getId());
        String key4Value = InfoUtil4Redis.makeKey4Value(FavIn.getId());
        log.info("生成的KEY爲:" + key4Set);
        if (redisTemplate.opsForSet().isMember(key4Set, FavIn.getId())) {
            flag = false;
            //log.info("所有成員如下:" + redisTemplate.opsForSet().members(key4Set));
        } else {
            // 保存SET
            redisTemplate.opsForSet().add(key4Set, FavIn.getId());
            // 保存對象
            redisTemplate.opsForHash().putAll(key4Hash, InfoUtil4Redis.makeMap(FavIn));
            // 存儲一個對象加1
            redisTemplate.opsForValue().increment(key4Value, 1);
            log.info("增加,完成");
        }
        return flag;
    }

    // 列表查詢
    @SuppressWarnings("unchecked")
    public List qryFav(FavIn FavIn) throws Exception {
        List<Info> InfoList = new ArrayList<Info>();
        String key4Set = InfoUtil4Redis.makeKey4Set(FavIn.getUserId());// 用戶鍵
        Set Ids = redisTemplate.opsForSet().members(key4Set);
        for (Iterator iterator = Ids.iterator(); iterator.hasNext();) {
            Object IdTemp = (Object) iterator.next();
            Info Result = doQryFavById(FavIn.getUserId(), IdTemp);
            InfoList.add(Result);
        }
        return InfoList;
    }
    //單獨查詢功能
    public Info qryFavById(FavIn FavIn) throws Exception {
        return doQryFavById(FavIn.getUserId(), FavIn.getId());
    }
       
    private Info doQryFavById(String userId, Object Id) throws Exception {
        String key4Hash = InfoUtil4Redis.makeKey4Has(userId, Id+"");;
        List<String> Details = redisTemplate.opsForHash().multiGet(key4Hash, InfoUtil4Redis.makeCollections());
        log.info("明細爲:" + key4Hash);
        Info Result = InfoUtil4Redis.buildBean(Details);
        return Result;
    }

    // 更新信息
    @SuppressWarnings("unchecked")
    public void updateFav(FavIn FavIn) {
        String key4Hash = InfoUtil4Redis.makeKey4Has(FavIn.getUserId(), FavIn.getId());
        redisTemplate.opsForHash().put(key4Hash, "_label", FavIn.getLabel());
        log.info("更新,完畢!");
    }

    // 取消
    @SuppressWarnings("unchecked")
    public void delFav(FavIn FavIn) throws Exception {
        // boolean flag =true;
        log.info("取消,開始");
        String key4Set = InfoUtil4Redis.makeKey4Set(FavIn.getUserId());// 用戶鍵
        String key4Hash = InfoUtil4Redis.makeKey4Has(FavIn.getUserId(), FavIn.getId());
        String key4Value = InfoUtil4Redis.makeKey4Value(FavIn.getId());
        if (!redisTemplate.opsForSet().isMember(key4Set, FavIn.getId())) {
            // flag =false;
            throw new Exception("不存在!");
        } else {
            // 刪除對象
            redisTemplate.opsForSet().remove(key4Set, FavIn.getId());
            redisTemplate.delete(key4Hash);
            // 數量減一
            redisTemplate.opsForValue().increment(key4Value, -1);
            log.info("取消,完成");
        }
        // return flag;
    }
   
}


-----------------------------------------------------------FavRedis.class--------end-------------------------------------------------------------

InfoUtil4Redis.class

工具類

-----------------------------------------------------------InfoUtil4Redis--------begin-----------------------------------------------------------

public class InfoUtil4Redis {
     //創建set鍵   作用與Java中的set功能類似
   public static String makeKey4Set(String userId) {
        return "usercenter::fav::Key4Set::" + userId;
    }
      //創建hash鍵  作用與Java中的hashmap功能類似 可以用來存儲對象
    public static String makeKey4Has(String userId, String Id) {
        return "usercenter::fav::Key4Hash::" + userId +"::"+Id;
    }
      //創建value鍵  
    public static String makeKey4Value(String Id) {
        return "usercenter::prod::"+Id;
    }
  }

-----------------------------------------------------------InfoUtil4Redis--------end---------------------------------------------------------------

 

發佈了13 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章