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
梅花香自古寒来