import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import javax.annotation.Resource;
import org.apache.commons.lang.StringUtils;
import org.springframework.data.redis.core.BulkMapper;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.core.query.SortQuery;
import org.springframework.data.redis.core.query.SortQueryBuilder;
import org.springframework.data.redis.hash.DecoratingStringHashMapper;
import org.springframework.data.redis.hash.HashMapper;
import org.springframework.data.redis.hash.JacksonHashMapper;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import org.springframework.data.redis.support.collections.DefaultRedisList;
import org.springframework.data.redis.support.collections.DefaultRedisMap;
import org.springframework.data.redis.support.collections.DefaultRedisSet;
import org.springframework.data.redis.support.collections.RedisList;
import org.springframework.data.redis.support.collections.RedisMap;
import org.springframework.data.redis.support.collections.RedisSet;
import org.springframework.stereotype.Component;
import com.demo.entity.Post;
/**
* @author zhaoqilong
* @version 创建时间:2012-3-27 下午1:52:51
* @param <K>
* @param <V>
*
*/
@Component
public class RedisBasic<T> {
@Resource
private StringRedisTemplate template;
//string 操作
private ValueOperations<String, String> valueOps;
private Class<T> entityClass;
private final HashMapper<T, String, String> entityMapper = new DecoratingStringHashMapper<T>(new JacksonHashMapper<T>((Class<T>) entityClass));
public RedisBasic(){
entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
/**
* 查询数据根据用户编号
* @param key
* @return
*/
public List<T> findByUid(String key) {
// test-user-1中数据 数据结构为key=test-user-1 value=pid (为*) ;#代表是查询 test-user-1 的value test-map-*->uid代表 test-map-*map下的key为uid的值
SortQuery<String> query = SortQueryBuilder.sort("test-user-1").noSort().get("#").get("test-map-*->uid").get("test-map-*->content").build();
BulkMapper<T, String> hm = new BulkMapper<T, String>() {
public T mapBulk(List<String> bulk) {
Map<String, String> map = new LinkedHashMap<String, String>();
Iterator<String> iterator = bulk.iterator();
String pid=iterator.next();
map.put("uid",iterator.next() );
map.put("content",iterator.next() );
return entityMapper.fromHash(map);//转型 将map转换成实体
}
};
System.out.println(redisMap("test-map-1").values()+"======================");
System.out.println(template.sort(query));
System.out.println( template.sort(query,hm));
return template.sort(query,hm);
}
/**
* 查询所有用户添加数据
* @param key
* @return
*/
public List<T> findByList() {
// test-list中数据 数据结构为key=test-list value=pid (为*) ; test-map-*->uid test-map-*->uid map下的key为uid的值
SortQuery<String> query = SortQueryBuilder.sort("test-list").noSort().get("test-map-*->uid").get("test-map-*->content").build();
BulkMapper<T, String> hm = new BulkMapper<T, String>() {
public T mapBulk(List<String> bulk) {
Map<String, String> map = new LinkedHashMap<String, String>();
Iterator<String> iterator = bulk.iterator();
// String pid=iterator.next();
map.put("uid",iterator.next() );
map.put("content",iterator.next() );
return entityMapper.fromHash(map);//转型 将map转换成实体
}
};
System.out.println(redisMap("test-map-1").values()+"=====================");//key为test-map-1 的 数据
System.out.println(template.sort(query));
System.out.println( template.sort(query,hm));
return template.sort(query,hm);
}
/**
* 添加数据
* @param uid
* @param post
*/
public void post(String uid, Post post) {
// String uid = findKey(username);
// post.setUid(uid);
// add post将entity转换成HASH
String pid = String.valueOf(incrementAndGet("test"));
redisMap("test-map-"+pid).putAll(entityMapper.toHash((T) post));
redisList("test-user-"+uid).addFirst(pid);//操作用户Id保存操作的对象
redisList("test-list").addFirst(pid);//保存所有的文章对象
}
/**
* 查找String key
* @param key
* @return
*/
public String findKey(String key) {
return valueOps().get(key);
}
public void addListOne(String key,String value){
redisList(key).addFirst(value);
}
/**
* 判断key是否存在
* @param key
* @return
*/
public boolean hasKey(String key) {
return template.hasKey(key);
}
/**
* 获取自增索引
* @param key
* @return
*/
public String incrementAndGet(String key){
if(StringUtils.isNotEmpty(key)){
RedisAtomicLong entityIdCounter=new RedisAtomicLong(key, template.getConnectionFactory());
return String.valueOf(entityIdCounter.incrementAndGet());
}else
return "";
}
/**
* 获取String操作项
* @return
*/
private ValueOperations<String, String> valueOps(){
if(valueOps!=null){
valueOps=template.opsForValue();
}
return valueOps;
}
/**
* 获取Set操作项
* @return
*/
private RedisSet<String> redisSet(String key) {
return new DefaultRedisSet<String>(key, template);
}
/**
* 获取MAP操作项
* @return
*/
private RedisMap<String, String> redisMap(String key) {
return new DefaultRedisMap<String, String>(key, template);
}
/**
* 获取List操作项
* @return
*/
private RedisList<String> redisList(String key) {
return new DefaultRedisList<String>(key, template);
}
配置文件
<context:annotation-config />
<bean id="connectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="${redis.host}"
p:port="${redis.port}"
p:password="${redis.pass}"/>
<context:component-scan base-package="com.demo"/>
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"
p:connection-factory-ref="connectionFactory"/>
maven
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-xc</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
本人只做测试
如需demo可以下载springsource 下的demo 为方便 已上传到附件
分享到:
相关推荐
文件列表中的`UserServiceTest.java`和`UserDaoTest.java`可能是测试类,它们可能包含了一些使用Spring Data Redis进行单元测试的例子,比如模拟用户数据的存储和检索。 在实际项目中,你可能会遇到更复杂的数据...
Spring Data Redis是Spring框架的一个模块,旨在简化Redis操作。它提供了RedisTemplate和StringRedisTemplate两个核心模板类,用于执行Redis命令。这两个模板类提供了丰富的API,使得开发者能够方便地进行键值操作...
在本文中,我们将深入探讨如何在...这个例子展示了如何在实际开发中利用Spring Data Redis来提升应用性能,同时确保了代码的健壮性和可测试性。在实际项目中,可以根据需求调整配置和测试用例,以满足不同的业务场景。
Spring-Data-Redis2.0整合Spring5的cachemanage例子,JDK要1.8,maven3.5吧。文档地址:http://blog.csdn.net/u011189939/article/details/78621724
在`pom.xml`文件中,我们需要引入Spring Data Redis和Jedis库,如下所示: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-redis <groupId>redis.clients <artifactId>...
在`pom.xml`或`build.gradle`文件中,你需要引入`spring-boot-starter-data-redis`依赖,这会提供Spring Data Redis的支持。例如,在Maven的`pom.xml`中: ```xml <groupId>org.springframework.boot ...
首先,你需要在项目中添加Spring Session和Spring Data Redis的依赖。在Maven的pom.xml文件中,可以添加如下依赖: ```xml <groupId>org.springframework.session <artifactId>spring-session-data-redis ...
这个简单的例子展示了如何在Spring Boot应用中配置和使用Redis。你可以根据实际需求扩展`MyRepository`和`MyService`,实现更复杂的操作,如批量操作、过期策略、事务支持等。通过Spring Data Redis,我们可以利用其...
《深入浅出Spring Data Redis:连接池与事务实践》 Spring Data Redis是Spring框架的一个重要模块,它为Redis提供了丰富的支持,使得在Java应用中使用Redis变得更加便捷。本篇文章将详细探讨Spring Data Redis的...
除此之外,Spring Data Redis还提供了对Redis高级特性的支持,如哈希、列表、集合、有序集合等数据结构的操作。例如,我们可以通过`opsForHash()`方法操作哈希: ```java @Autowired private RedisTemplate, Object...
首先,为了在Spring Boot项目中引入Redis,我们需要在`pom.xml`文件中添加Spring Data Redis依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-redis ``` 接下来,配置...
在Java开发中,Spring Data是一个强大的框架,它简化了数据访问层的实现,支持多种数据库技术,如JPA(Java Persistence API)、MongoDB、Neo4j和Redis。本压缩包包含的是一个使用Spring Data与这些数据库系统交互的...
4. **创建 Redis 操作接口**:创建一个 RedisRepository 接口,继承自 Spring Data Redis 提供的 CrudRepository,定义你需要的操作方法。 ```java public interface RedisRepository extends CrudRepository, ...
然后,定义一个RedisTemplate或StringRedisTemplate的bean,这是Spring Data Redis提供的核心组件,用于操作Redis: ```java @Bean public RedisTemplate, Object> redisTemplate(RedisConnectionFactory ...
总结来说,整合Spring和Redis能够有效地提升应用性能,通过Spring Data Redis提供的API,我们可以方便地进行键值操作、事务处理、消息订阅等。在实际应用中,根据需求可以进一步优化配置,比如使用Redis的Pipeline或...
在整合SSM与Redis的过程中,我们通常会利用Spring的数据访问/集成模块(Spring Data Redis)来连接和操作Redis。这需要在Spring配置文件中添加对应的Redis配置,包括Redis服务器的地址、端口、密码等信息。同时,...
可能涉及的技术点包括Spring Data Redis模块,用于简化Redis操作;Jedis或Lettuce客户端的使用,如缓存用户会话、实现分布式锁等。通过分析源代码,你可以学习到如何在实际项目中运用Redis提升性能。 4. **SQL脚本*...
1. **依赖添加**:在项目中添加 Spring Data Redis 和 Redis 集群相关的依赖,如 `spring-boot-starter-data-redis` 和 `lettuce-core`。 2. **配置 Redis 链接**:在 `application.properties` 或 `application....
<artifactId>spring-boot-starter-data-redis <groupId>redis.clients <artifactId>jedis ``` 接下来,我们需要配置Redis连接信息。在`application.yml`或`application.properties`文件中添加如下配置: ```...