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= ;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" />

redisTemplate 操作的更多相关文章

  1. Spring RedisTemplate操作-xml配置(1)

    网上没能找到全的spring redistemplate操作例子,故特意化了点时间做了接口调用练习,基本包含了所有redistemplate方法. 该操作例子是个系列,该片为spring xml配置, ...

  2. redis命令和RedisTemplate操作对应表

    redis命令和RedisTemplate操作对应表 redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash r ...

  3. spring data redis RedisTemplate操作redis相关用法

    http://blog.mkfree.com/posts/515835d1975a30cc561dc35d spring-data-redis API:http://docs.spring.io/sp ...

  4. 在Java中使用redisTemplate操作缓存

    背景 在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条.但同时对查询速度的要求也比较高. 这个数据库之前在没有使用Presto的情况下,使用的是Hive,使用Hive进行一 ...

  5. Spring中使用RedisTemplate操作Redis(spring-data-redis)

    RedisTemplate如何检查一个key是否存在? return getRedisTemplate().hasKey(key); 由一个问题,复习了一下redis 抄自: https://www. ...

  6. SpringBoot 使用RedisTemplate操作Redis

    新版: import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.T ...

  7. spring-data-redis 中使用RedisTemplate操作Redis

    Redis 数据结构简介 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集合 ...

  8. RedisTemplate操作Redis

    RedisTemplate Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序 ...

  9. Java 使用Jedis和RedisTemplate操作Redis缓存(SpringBoot)

    package com.example.redis.controller; import com.example.redis.entity.User; import com.example.redis ...

  10. springboot中,使用redisTemplate操作redis

    知识点: springboot中整合redis springboot中redisTemplate的使用 redis存数据时,key出现乱码问题 一:springboot中整合redis (1)pom. ...

随机推荐

  1. html(第一天,div+css)

    一.CSS布局属性 Width:设置对象的宽度(width:45px). Height:设置对象的高度(Height:45px;). Background:设置对象的背景颜色.背景图像. 1.背景颜色 ...

  2. HLS 协议

    HTML 5 视频直播一站式扫盲   本文来自于腾讯bugly开发者社区,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1 ...

  3. dzz使用总结(添加云盘,好用的Web文件管理器,网络播放器)

    dzz添加云盘: http://www.lebook.me/book/22822#fid_3990471 呆萌http://pan.diemoe.net/s/GcdFI4 网络播放器 mediaele ...

  4. File中操作路径的API(转)

    这几天一直在搞Java,模板引擎系列和程序猿执业修养系列都暂停了,在Java上忙的不亦乐乎!由于对Java还不太熟悉,经历了各种纠结终于完成了任务.以下是关于Java获取当前目录的方法的备忘录. 原文 ...

  5. 解决Jetty Maven Plugin:Please initialize the log4j system properly(转)

    解决Jetty Maven Plugin:Please initialize the log4j system properly.Jetty Maven Plugin环境: <plugin> ...

  6. [K/3Cloud] 如何从被调用的动态表单界面返回数据

    在需要返回数据的地方调用表单返回方法完成数据返回 this.View.ReturnToParentWindow(retData); 在调用界面的回调函数中取出返回结果的ReturnData即可使用. ...

  7. 谈谈Facebook的聊天系统架构

    今天看到一份 Facebook 公司 2009 年的 Slideshow, 介绍它的聊天系统架构, 其中的一张图结构非常清晰, 所以我对这张图谈谈我的看法. Web Tier: 用 PHP 开发, 聊 ...

  8. BZOJ 3038: 上帝造题的七分钟2

    3038: 上帝造题的七分钟2 Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分 ...

  9. switch语句:适用于一个条件有多个分支的情况---分支语句

    例1: 客服选择功能,然后按按键 Console.WriteLine("查花费请按1,查余额请按2,查流量请按3,办理业务请按4,宽带请按5,人工服务请按6,集团业务请按7"); ...

  10. javascript面向对象创建高级 Web 应用程序

       目录 JavaScript 对象是词典 JavaScript 函数是最棒的 构造函数而不是类 原型 静态属性和方法 闭包 模拟私有属性 从类继承 模拟命名空间 应当这样编写 JavaScript ...