redisTemplate 操作

redisDao封装类-其他dao集成他


package com.ffcs.wlan.dao.common;
import javax.annotation.Resource;
import org.springframework.data.redis.core.StringRedisTemplate;

/** 
 * AbstractBaseRedisDao
 * @author hugsh
 * @version <b>1.0</b> 
 */ 
public abstract class AbstractBaseRedisDao<K, V> {
	
	@Resource
	protected StringRedisTemplate redisTemplate;

	public void setRedisTemplate(StringRedisTemplate redisTemplate) {
		this.redisTemplate = redisTemplate;
	}
}


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


@Repository
public  class RedisInitDao extends AbstractBaseRedisDao<String, Object> {
		
	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<Map<String, Object>> list,final String tableName) {
			boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
				public Boolean doInRedis(RedisConnection connection)
						throws DataAccessException {
					RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
					for (Map<String, Object> 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<String> getLogFromRedis() {
		
		final RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
		//密码日志的长度
		final Long pwdLogSize=redisTemplate.opsForList().size("getpwdList");
		
		List<Object> pwdLogList=redisTemplate.executePipelined(new RedisCallback<String>() {
			@Override
			public String doInRedis(RedisConnection conn)
					throws DataAccessException {
				for (int i=0 ;i<pwdLogSize ;i++) {
					byte[] listName  = serializer.serialize("getpwdList");
					conn.rPop(listName);
				}
				return null;
			}
		}, serializer);
		
		//	去除结果中的null
		ArrayList<String> newList=new ArrayList<String>();
		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());
		}
	}




配置文件


<?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: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">


	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="${redis.maxTotal}"></property>
		<property name="maxIdle" value="${redis.maxIdle}" /> 
		<property name="maxWaitMillis" value="${redis.maxWait}" />
		<property name="testOnBorrow" value="${redis.testOnBorrow}" />
	</bean>
	
	
	<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
		p:host-name="${redis.host}" p:port="${redis.port}" p:pool-config-ref="poolConfig"/>
	
	<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
		<property name="connectionFactory" 	ref="connectionFactory" />
	</bean>		
	
</beans>

	<!-- 引入项目配置文件 -->
 	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 		<property name="locations">
 			<list>
 				<value>classpath:redis.properties</value><!-- 引入redis配置文件 -->
 				<value>classpath:jdbc.properties</value><!-- 定义spring-jdbc配置信息路径 -->
 			</list>
 		</property>
 	</bean>
	
	
	<!-- 自动扫描model,dao和service包(自动注入) -->
	<context:component-scan base-package="com.ffcs.wlan.model,com.ffcs.wlan.dao,com.ffcs.wlan.service" />


属性文件


# 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





  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值