集成方式各异,直接上代码。
一、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命令)
依次是 String、list、hash、根据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冲突报错版本解决
相关推荐
2. `spring-data-redis.jar`: Spring Data Redis是Spring框架的一部分,它为Redis提供了Spring的模板和Repository支持,使得与Redis的交互更加简单和直观。 3. `lettuce.jar` (可选): Lettuce是另一个Redis客户端,...
SpringCloud通过集成Spring Data Redis模块,使得在微服务架构中与Redis进行交互变得非常便捷。以下将详细介绍如何在SpringCloud中配置和使用Redis集群。 首先,你需要了解Redis集群的基本概念。Redis集群通过数据...
整合完成后,通过单元测试验证Redis与Spring的交互是否正常,确保缓存功能按预期工作。可以编写测试用例,模拟多线程环境下读写数据,检验并发性能和缓存一致性。 总的来说,"redis与spring整合"项目展示了如何在...
首先,集成Spring与Redis的关键在于`spring-data-redis`模块,它为Spring应用提供了操作Redis的高级抽象。你需要包含这个模块的jar文件,以确保能够使用Spring的RedisTemplate和StringRedisTemplate等工具进行数据...
首先,集成Spring与Redis的主要目的是利用Spring Data Redis模块,该模块为Spring应用提供了与Redis交互的一系列便捷工具和API。Spring Data Redis提供了Repository抽象,使得开发者可以使用类似于操作数据库的方式...
【标题】"spring,mybatis,hibernate,activemq,redis,dubbo的集成" 这个标题提及的是一个综合性的Java开发项目,它整合了多个流行的技术框架和中间件,旨在提供一个全面的后端服务解决方案。让我们逐一探讨这些...
通过使用Spring Data Redis,开发者可以避免直接与Redis命令行交互,而是通过编程方式实现各种操作,这极大地提高了代码的可读性和可维护性。 在Spring Data Redis中,关键概念包括`RedisTemplate`和`...
Spring Data Redis则是Spring框架提供的一套用于操作Redis的高级抽象库,它使得与Redis的数据交互变得更加简单和直观。现在我们来深入探讨一下这三个组件以及它们之间的关系。 首先,Redis是一个开源的、基于键值对...
2. **创建SessionRepository**:Spring Session框架允许我们自定义SessionRepository实现,通常会使用RedisOperationsSessionRepository,它利用Spring的Template机制与Redis交互,保存和检索Session。 3. **集成...
之后,每次API请求都会携带JWT,Redis和Spring Security共同完成身份验证,MyBatis则负责与MySQL数据库的交互,实现数据的读写操作。这样的设计提高了系统的安全性、性能和可扩展性,是现代Web应用开发中的典型架构...
有了连接工厂,我们可以创建一个`RedisTemplate`,它是Spring与Redis交互的主要接口: ```xml <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> ``` 在Java配置类中,...
将Redis与Spring集成,可以轻松地在应用中实现缓存功能,提高系统的响应速度和数据一致性。 在这个"spring+springmvc+mybatis+redis框架"的示例中,开发者可能已经创建了一个完整的Web应用,其中: 1. Spring作为...
在Spring Session + Redis的集成中,Jedis作为客户端库,负责与Redis服务器交互,读写会话数据。 2. **Spring Data Redis**:这是Spring框架的一个模块,用于简化Redis数据存储的访问。它提供了对Redis的抽象层,...
2. **Spring Data Redis**:Spring Data项目的一部分,它提供了一套用于操作Redis的抽象层,使开发者能更方便地在应用中集成Redis,支持键值对、哈希、集合、有序集合等多种数据结构的操作。 3. **Redis**:是一个...
在Spring中整合Redis,主要涉及到Spring Data Redis模块,它为Redis提供了高度抽象的API,简化了与Redis的交互。 Redis是一个高性能的键值存储系统,常被用作数据库、缓存和消息中间件。它的特点是数据持久化、支持...
1. **高级抽象层**:Spring Data Redis提供了一套高级抽象接口,使得开发人员能够更方便地与Redis进行交互,而无需深入理解底层协议细节。 2. **集成Spring生态**:该模块与Spring框架紧密结合,可以无缝集成到基于...
Spring 还提供了一个数据访问层,可以方便地与各种数据库进行交互,包括 NoSQL 数据库如 Redis。 **Redis** 是一个高性能的键值对数据存储系统,通常作为缓存或消息代理使用。它支持多种数据结构,如字符串、哈希、...
3. **Redis的键过期策略**:Redis提供了两种过期策略,一种是定期检查,另一种是在读写操作时检查。当内存压力大时,Redis会触发淘汰策略,这里描述的是近似LRU策略。Redis并不是为每个键存储访问时间,而是使用一个...
Spring Data Redis项目提供了与Redis交互的API,使得操作Redis变得简单。配置Redis连接通常在`application.properties`中完成,包括主机地址、端口、密码等信息。 对于Spring Boot应用来说,有几种方式来使用Redis...
首先,`JedisSlotAdvancedConnectionHandler.java` 文件可能是一个自定义的连接处理器类,用于增强JedisCluster与Redis集群之间的交互。在JedisCluster中,每个节点都维护着一个哈希槽(Hash Slot),用于决定数据...