`
TableMiao
  • 浏览: 75977 次
  • 性别: 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
分享到:
评论

相关推荐

    Spring3.0整合redis相关jar

    2. `spring-data-redis.jar`: Spring Data Redis是Spring框架的一部分,它为Redis提供了Spring的模板和Repository支持,使得与Redis的交互更加简单和直观。 3. `lettuce.jar` (可选): Lettuce是另一个Redis客户端,...

    springcloud部署redis集群

    SpringCloud通过集成Spring Data Redis模块,使得在微服务架构中与Redis进行交互变得非常便捷。以下将详细介绍如何在SpringCloud中配置和使用Redis集群。 首先,你需要了解Redis集群的基本概念。Redis集群通过数据...

    redis与spring整合

    整合完成后,通过单元测试验证Redis与Spring的交互是否正常,确保缓存功能按预期工作。可以编写测试用例,模拟多线程环境下读写数据,检验并发性能和缓存一致性。 总的来说,"redis与spring整合"项目展示了如何在...

    spring4.0结合redis3.0

    首先,集成Spring与Redis的关键在于`spring-data-redis`模块,它为Spring应用提供了操作Redis的高级抽象。你需要包含这个模块的jar文件,以确保能够使用Spring的RedisTemplate和StringRedisTemplate等工具进行数据...

    spring集成redis,集成redis集群

    首先,集成Spring与Redis的主要目的是利用Spring Data Redis模块,该模块为Spring应用提供了与Redis交互的一系列便捷工具和API。Spring Data Redis提供了Repository抽象,使得开发者可以使用类似于操作数据库的方式...

    spring,mybatis,hibernate,activemq,redis,dubbo的集成

    【标题】"spring,mybatis,hibernate,activemq,redis,dubbo的集成" 这个标题提及的是一个综合性的Java开发项目,它整合了多个流行的技术框架和中间件,旨在提供一个全面的后端服务解决方案。让我们逐一探讨这些...

    spring-data-redis最新架包

    通过使用Spring Data Redis,开发者可以避免直接与Redis命令行交互,而是通过编程方式实现各种操作,这极大地提高了代码的可读性和可维护性。 在Spring Data Redis中,关键概念包括`RedisTemplate`和`...

    spring-data-redis-1.6.0.RELEASE.jar + jedis-2.7.2.jar

    Spring Data Redis则是Spring框架提供的一套用于操作Redis的高级抽象库,它使得与Redis的数据交互变得更加简单和直观。现在我们来深入探讨一下这三个组件以及它们之间的关系。 首先,Redis是一个开源的、基于键值对...

    spring+redis整合

    2. **创建SessionRepository**:Spring Session框架允许我们自定义SessionRepository实现,通常会使用RedisOperationsSessionRepository,它利用Spring的Template机制与Redis交互,保存和检索Session。 3. **集成...

    SpringBoot2.7整合SpringSecurity+Jwt+Redis+MySQL+MyBatis完整项目代码

    之后,每次API请求都会携带JWT,Redis和Spring Security共同完成身份验证,MyBatis则负责与MySQL数据库的交互,实现数据的读写操作。这样的设计提高了系统的安全性、性能和可扩展性,是现代Web应用开发中的典型架构...

    spring整合redis案例(jedis)

    有了连接工厂,我们可以创建一个`RedisTemplate`,它是Spring与Redis交互的主要接口: ```xml &lt;bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"&gt; ``` 在Java配置类中,...

    spring+springmvc+mybatis+redis框架

    将Redis与Spring集成,可以轻松地在应用中实现缓存功能,提高系统的响应速度和数据一致性。 在这个"spring+springmvc+mybatis+redis框架"的示例中,开发者可能已经创建了一个完整的Web应用,其中: 1. Spring作为...

    spring-session+spring+redis的依赖包

    在Spring Session + Redis的集成中,Jedis作为客户端库,负责与Redis服务器交互,读写会话数据。 2. **Spring Data Redis**:这是Spring框架的一个模块,用于简化Redis数据存储的访问。它提供了对Redis的抽象层,...

    spring-redis-mysql整合

    2. **Spring Data Redis**:Spring Data项目的一部分,它提供了一套用于操作Redis的抽象层,使开发者能更方便地在应用中集成Redis,支持键值对、哈希、集合、有序集合等多种数据结构的操作。 3. **Redis**:是一个...

    maven-spring-redis

    在Spring中整合Redis,主要涉及到Spring Data Redis模块,它为Redis提供了高度抽象的API,简化了与Redis的交互。 Redis是一个高性能的键值存储系统,常被用作数据库、缓存和消息中间件。它的特点是数据持久化、支持...

    Spring Data Redis中文参考文档

    1. **高级抽象层**:Spring Data Redis提供了一套高级抽象接口,使得开发人员能够更方便地与Redis进行交互,而无需深入理解底层协议细节。 2. **集成Spring生态**:该模块与Spring框架紧密结合,可以无缝集成到基于...

    spring与Redis的入门Demo

    Spring 还提供了一个数据访问层,可以方便地与各种数据库进行交互,包括 NoSQL 数据库如 Redis。 **Redis** 是一个高性能的键值对数据存储系统,通常作为缓存或消息代理使用。它支持多种数据结构,如字符串、哈希、...

    springboot分布式自增id_javaredis_源码

    3. **Redis的键过期策略**:Redis提供了两种过期策略,一种是定期检查,另一种是在读写操作时检查。当内存压力大时,Redis会触发淘汰策略,这里描述的是近似LRU策略。Redis并不是为每个键存储访问时间,而是使用一个...

    springboot+redis单机与集群

    Spring Data Redis项目提供了与Redis交互的API,使得操作Redis变得简单。配置Redis连接通常在`application.properties`中完成,包括主机地址、端口、密码等信息。 对于Spring Boot应用来说,有几种方式来使用Redis...

    操作redis集群连接插入读写

    首先,`JedisSlotAdvancedConnectionHandler.java` 文件可能是一个自定义的连接处理器类,用于增强JedisCluster与Redis集群之间的交互。在JedisCluster中,每个节点都维护着一个哈希槽(Hash Slot),用于决定数据...

Global site tag (gtag.js) - Google Analytics