`
TableMiao
  • 浏览: 73830 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Redis(三) 与Spring集成、读写交互操作

阅读更多
Redis() Spring集成、读写交互操作

 集成方式各异,直接上代码。

    一、jar准备

    :不同版本的可能会引起冲突报错,开始我用的jedis版本为1.2.1的与spring-data-redis 1.6.0的集成就报错了,后改为jedis版本为2.4.2的进行使用。

   4个易冲突的maven依赖附上

 

                 <dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.4.2</version>
		</dependency>
               <dependency>
                  <groupId>org.springframework.data</groupId>  
	          <artifactId>spring-data-redis</artifactId>  
	          <version>1.6.0.RELEASE</version>  
  	       </dependency>
               <dependency>
			<groupId>commons-pool</groupId>
			<artifactId>commons-pool</artifactId>
			<version>1.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.2</version>
		</dependency>

 

、配置文件

 

1.properties 文件

  # Redis settings

   redis.maxIdle = 5  

   redis.maxActive = 50

   redis.maxWait = 300000

   redis.testOnBorrow = true

   redis.hostName = 192.168.1.118

   redis.port = 6379


2.redis连接池配置、连接配置、及暴露封装好了的redisTemplate

<?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:context="http://www.springframework.org/schema/context"
	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">
	
	<context:property-placeholder location="classpath:applicationContext.properties" />
	<context:component-scan base-package="com.tablemiao.redis.dao"></context:component-scan>
	<!-- 连接池配置 最大空闲数、最大连接数、最长等待时间、连接是否可用 -->
	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxIdle" value="${redis.maxIdle}" />
		<property name="maxTotal" value="${redis.maxActive}" />
		<property name="maxWaitMillis" value="${redis.maxWait}" />
		<property name="testOnBorrow" value="${redis.testOnBorrow}" />
	</bean>
	
	<!-- 连接配置 地址、端口 -->
	<bean id="connectionFactory"
		class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
		<property name="hostName" value="${redis.hostName}" />
		<property name="port" value="${redis.port}" />
		<property name="poolConfig" ref="poolConfig" />
	</bean>	
	
	<!-- 暴露一个redisTemplate 用作redis一系列操作 -->
	<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
		<property name="connectionFactory" ref="connectionFactory" />
	</bean>
</beans>

 

三、redisTemplate的使用

 1.BaseDao 得到可用的redis连接,直接获取redisTemplate进行对redis数据库的操作,redisTemplate本身就做了对redis命令的封装,只是个人感觉不是特别友好。

public class BaseDao {
    
	protected RedisTemplate<String, Object> redisTemplate;
	
	protected Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	@Qualifier("redisTemplate")
	public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
		this.redisTemplate = redisTemplate;
	}
	
}

2.调用redisTemplate中的方法进行对数据的操作,按个人喜好简单封装(只列举了几个,其实方法底层也是操作redis命令)

依次是 Stringlisthash、根据key值拿数据、删除数据

package com.tablemiao.redis.dao;

import java.util.List;

import org.springframework.data.redis.connection.DataType;
import org.springframework.stereotype.Repository;

import com.tablemiao.redis.BaseDao;

@Repository
public class CustomDao extends BaseDao{
	
	public boolean insertString(String key, String value) {
		try {
			 super.redisTemplate.opsForValue().set(key, value);
			return true;
		} catch (Exception e) {
			logger.info("新增错误:{}", e.getMessage());
			return false;
		}

	}
	
	public boolean insertList(String key, Object value) {
		try {
			super.redisTemplate.opsForList().leftPushAll(key, value);	
			return true;
		} catch (Exception e) {
			logger.info("新增错误:{}", e.getMessage());
			return false;
		}

	}
	
	public boolean insertHash(String key, String sonKey ,Object value) {
		try {
			super.redisTemplate.opsForHash().put(key, sonKey, value);	
			return true;
		} catch (Exception e) {
			logger.info("新增错误:{}", e.getMessage());
			return false;
		}

	}
	
	public Object select(String key){
		try {
			 DataType type = redisTemplate.type(key);
			 if(DataType.NONE == type){
				 logger.info("key不存在");
				 return null;
			 }else if(DataType.STRING == type){
				 return super.redisTemplate.opsForValue().get(key);
			 }else if(DataType.LIST == type){
				 return super.redisTemplate.opsForList().range(key, 0, -1);
			 }else if(DataType.HASH == type){
				 return super.redisTemplate.opsForHash().entries(key);
			 }else
				 return null;
		} catch (Exception e) {
			logger.info("查询错误:{}", e.getMessage());
			return null;
		}
	}
	
	public boolean delete(List<String> keys){
		try{
			redisTemplate.delete(keys);
			return true;
		}catch(Exception e){
			logger.info("删除失败:{}", e.getMessage());
			return false;
		}
	}
}

 

3.测试类及结果

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

import com.tablemiao.redis.dao.CustomDao;

@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class Test extends AbstractJUnit4SpringContextTests{
	
	protected Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	private CustomDao c;
	
	@org.junit.Test
	public void test(){
		
		logger.info("=========start===========");
		/*
		      String的操作
		c.insertString("java:string:english", "java_insert_string");
		logger.info("查询redis中的值:{}",c.select("java:string:english"));
		c.insertString("java:string:cn", "redis学习");
		logger.info("查询redis中的值:{}",c.select("java:string:cn"));	
		*/
		
		/*
            	列表操作
		List<Object> list = new ArrayList<Object>();
		list.add("redis学习");
		list.add("123456789");
		c.insertList("java:list", list);
		logger.info("查询redis中的值:{}",c.select("java:list"));
		//创建一个列表之后 再次添加一个Map到列表里面
		Map<String,String> map = new HashMap<String,String>();
		map.put("A", "sss");
		map.put("AB", "sssdf");
		c.insertList("java:list", map.toString());
		logger.info("查询redis中的值:{}",c.select("java:list"));
		*/
		
		/*
              	哈希表操作
		c.insertHash("java:map", "key1", "123");
		//得到这个Hash类型  再次放入一个对象
		CustomEntity bean = new CustomEntity();
		bean.setA(123);
		bean.setB(new Date());
		bean.setC("ABC");
		logger.info("查询redis中的值:{}",c.select("java:map"));
		c.insertHash("java:map", "key2", bean.toString());
		logger.info("查询redis中的值:{}",c.select("java:map"));
		*/
		
		/*
		       读取redis中的数据
	    logger.info("查询redis中的值:{}",c.select("java:map"));
	    Object map = c.select("java:map");
	    if(map instanceof Map){
	    	Map<String,Object> resultMap = (Map<String,Object>)map;
	    	
	    	Iterator<Object> it = resultMap.values().iterator();
	    	while(it.hasNext())
	    		logger.info("遍历Map:{}",it.next());
	    }
	    */
		
		/*
             	删除数据
		logger.info("查询redis中的值:{}",c.select("java:map"));
		List<String> keys = new ArrayList<String>();
		keys.add("java:map");
		c.delete(keys);
		logger.info("查询redis中的值:{}",c.select("java:map"));
		*/
		logger.info("=========end===========");
	}
}

 

列表操作的结果:

哈希表操作的结果:

查询操作的结果:

删除操作的结果:

 

注:代码在整体maven项目中的cc-redis-two,测试类在src/test/java

 

参考:

http://blog.csdn.net/dyllove98/article/details/9632407  spring-data-redis简单操作

http://docs.spring.io/spring-data/redis/docs/1.0.x/api/org/springframework/data/redis/core/RedisTemplate.html#delete%28java.util.Collection%29      RedisTemplate API

http://stackoverflow.com/questions/22704518/jedispoolconfig-is-not-assignable-to-genericobjectpoolconfig    jar冲突报错版本解决

 

  • 大小: 41.6 KB
  • 大小: 26 KB
  • 大小: 32.5 KB
  • 大小: 31.2 KB
分享到:
评论

相关推荐

    springboot+dubbo分布式架构,提供分布式缓存、分布式锁、分布式Session、读写分离

    缓存和Session:注解redis缓存数据,Spring-session和redis实现分布式session同步,重启服务会话不丢失。 数据同步:基于redis的分布式锁。 Web安全:实现XSS过滤和CSR过滤。 多系统交互:Dubbo,ActiveMQ多系统交互...

    单点登录源码

    Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 &gt; zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,`zheng`...

    Java及大数据学习路线.pdf

    异步数据传输框架Ajax ⽂件的上传下载 1.3JavaEE框架 系统整体分层解耦框架spring 轻量级Web框架springmvc 轻量级持久层框架mybatis 服务器操作系统Linux 内存数据库Redis 项⽬架构、jar包管理⼯具Maven 1.4JavaEE⾼...

    JavaEE大型分布式电商项目 淘淘商城 29期

    淘淘商城是一个综合性的B2C平台,类似与京东、天猫商城,其打造的是商业模式为“社区+电子商务”, 用户不只是在社区中有自己的圈子,还可以将电商加入到社区中,整个电商网站实现的功能非常之多,采用分布式的系统...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    SpringMvc_day01.spring入门-springMVC三大核心器(视图解析器,处理器映射器and适配器).springMvc整合myBatis SpringMvc_day02高级参数.上传图片.JSON数据交互.拦截器 15-SSM企业案例-客户管理系统(学习1天) ...

    java开源包1

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包11

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包2

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包3

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包6

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包5

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包10

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包4

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包8

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包7

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包9

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    java开源包101

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    Java资源包01

    jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列...

    iBase4J分布式系统-其他

    核心框架:Sring boot + Spring Framework + Dubbo + ibase4j-common安全框架:Apache Shiro任务调度:Spring + Quartz持久层框架:MyBatis + MyBatis-Plus数据库连接池:Alibaba Druid缓存框架:Redis会话管理:...

    xmljava系统源码-SLPlat:SLPlat基于开源项目ibase4j调整而得的,专注于本科院校实践类课程的教学与考试服务的平台。该平台

    SLPlat基于开源项目ibase4j调整而得的,专注于本科院校实践类课程的教学与考试服务的平台 该平台是Java语言的分布式系统架构,使用Spring整合开源框架。 使用Maven对项目进行模块化管理,提高项目的易开发性、扩展性...

Global site tag (gtag.js) - Google Analytics