redisTemplate 操作及相关配置

redisDao封装类-其他dao集成他

package com.ffcs.wlan.dao.common;  
import javax.annotation.Resource;  
import org.springframework.data.redis.core.StringRedisTemplate;  
  
/**  
 * AbstractBaseRedisDao 
 * @author hugsh 
 * @version 1.0  
 */   
public abstract class AbstractBaseRedisDao {  
      
    @Resource  
    protected StringRedisTemplate redisTemplate;  
  
    public void setRedisTemplate(StringRedisTemplate redisTemplate) {  
        this.redisTemplate = redisTemplate;  
    }  
}  

 批量插入(不关注返回值)

@Repository  
public  class RedisInitDao extends AbstractBaseRedisDao {  
          
    Logger logger=Logger.getLogger(RedisInitDao.class);  
      
        /** 
         * 批量向redis中插入H码:key(tableName:hcode) value(pcode) 
         * 如果键已存在则返回false,不更新,防止覆盖。使用pipeline批处理方式(不关注返回值) 
         *  @param list  一个map代表一行记录,2个key:hcode & pcode。 
         *  @param tableName redis中key的值为tableName:hcode  对应value值为pcode。 
         *  @return 
         */  
        public boolean addHcode(final List> list,final String tableName) {  
            boolean result = redisTemplate.execute(new RedisCallback() {  
                public Boolean doInRedis(RedisConnection connection)  
                        throws DataAccessException {  
                    RedisSerializer serializer = redisTemplate.getStringSerializer();  
                    for (Map map : list) {  
                        byte[] key  = serializer.serialize(tableName+":"+map.get("hcode").toString());  
                        byte[] name = serializer.serialize(map.get("pcode").toString());  
                        connection.setNX(key, name);  
                    }  
                    return true;  
                }  
            }, false, true);  
            return result;  
        }  

批量获取(有返回值)

/** 
 * 从redis中获取(获取密码日志) rPop从链表尾部弹出(最早的日志) 
 * 多线程并发读取日志长度的时候,比如都得到结果是1000条。 
 * 当多线程每个都 循环1000次 pop弹出 日志的时候, 
 * 由于是多线程一起pop,所以每个线程获得的数组中都会包含 null  甚至有的全是null 
 * @return 
 */  
public List getLogFromRedis() {  
      
    final RedisSerializer serializer = redisTemplate.getStringSerializer();  
    //密码日志的长度  
    final Long pwdLogSize=redisTemplate.opsForList().size("getpwdList");  
      
    List pwdLogList=redisTemplate.executePipelined(new RedisCallback() {  
        @Override  
        public String doInRedis(RedisConnection conn)  
                throws DataAccessException {  
            for (int i=0 ;i newList=new ArrayList();  
    for (Object o : pwdLogList) {  
        if(o!=null)  
            newList.add(String.valueOf(o));  
    }  
    return newList;  
}   
  

基础数据类型工具类(opsForList)

/** 
 * 向redis中插入获取密码日志:leftPush 从链表头部压入 
 *  @param pwdLog 获取密码的日志 
 *  @return 
 */  
public void addLogIntoRedis(final String pwdLog) {  
    log.info("insert getpwd log into redis:"+pwdLog);  
    try {  
        redisTemplate.opsForList().leftPush("getpwdList", pwdLog);  
    } catch (Exception e) {  
        log.error(e.getMessage());  
    }  
} 

配置文件

  
  
  
  
      
          
           
          
          
      
      
      
      
      
      
          
             
      
  

 

  
      
          
              
                classpath:redis.properties  
                classpath:jdbc.properties  
              
          
      
  
  
  
  

属性文件

# Redis settings  
redis.host=192.168.11.100  
redis.port=6379  
#redis.pass=hugsh    
redis.maxIdle=25  
redis.maxTotal=250  
#redis.maxActive=600 invalid in2.4  
redis.maxWait=1000  
redis.testOnBorrow=true  

 

你可能感兴趣的:(缓存技术)