redisTemplate 操作及相关配置
Posted 那些年的代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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> {
-
-
-
protected StringRedisTemplate redisTemplate;
-
-
public void setRedisTemplate(StringRedisTemplate redisTemplate) {
-
this.redisTemplate = redisTemplate;
-
}
-
}
批量插入(不关注返回值)
-
-
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>() {
-
-
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());
-
}
-
}
配置文件
-
-
<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
-
以上是关于redisTemplate 操作及相关配置的主要内容,如果未能解决你的问题,请参考以下文章
REDIS05_SpringBoot整合redisRedisTemplate操作各个基本类型工具类的抽取
如何在 Spring Boot 应用程序中创建第二个 RedisTemplate 实例