`

spring data redis 小例子

阅读更多


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 为方便 已上传到附件
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring data redis的简单应用

    文件列表中的`UserServiceTest.java`和`UserDaoTest.java`可能是测试类,它们可能包含了一些使用Spring Data Redis进行单元测试的例子,比如模拟用户数据的存储和检索。 在实际项目中,你可能会遇到更复杂的数据...

    Spring+Redis整合例子

    Spring Data Redis是Spring框架的一个模块,旨在简化Redis操作。它提供了RedisTemplate和StringRedisTemplate两个核心模板类,用于执行Redis命令。这两个模板类提供了丰富的API,使得开发者能够方便地进行键值操作...

    spring 集成 redis 使用例子

    在本文中,我们将深入探讨如何在...这个例子展示了如何在实际开发中利用Spring Data Redis来提升应用性能,同时确保了代码的健壮性和可测试性。在实际项目中,可以根据需求调整配置和测试用例,以满足不同的业务场景。

    Spring-Data-Redis2.0+Spring5

    Spring-Data-Redis2.0整合Spring5的cachemanage例子,JDK要1.8,maven3.5吧。文档地址:http://blog.csdn.net/u011189939/article/details/78621724

    spring集成redis的使用demo

    在`pom.xml`文件中,我们需要引入Spring Data Redis和Jedis库,如下所示: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-data-redis &lt;groupId&gt;redis.clients &lt;artifactId&gt;...

    Spring boot redis demo.rar

    在`pom.xml`或`build.gradle`文件中,你需要引入`spring-boot-starter-data-redis`依赖,这会提供Spring Data Redis的支持。例如,在Maven的`pom.xml`中: ```xml &lt;groupId&gt;org.springframework.boot ...

    spring session redis分布式session

    首先,你需要在项目中添加Spring Session和Spring Data Redis的依赖。在Maven的pom.xml文件中,可以添加如下依赖: ```xml &lt;groupId&gt;org.springframework.session &lt;artifactId&gt;spring-session-data-redis ...

    spring boot redis demo

    这个简单的例子展示了如何在Spring Boot应用中配置和使用Redis。你可以根据实际需求扩展`MyRepository`和`MyService`,实现更复杂的操作,如批量操作、过期策略、事务支持等。通过Spring Data Redis,我们可以利用其...

    spring-data-redis_exm

    《深入浅出Spring Data Redis:连接池与事务实践》 Spring Data Redis是Spring框架的一个重要模块,它为Redis提供了丰富的支持,使得在Java应用中使用Redis变得更加便捷。本篇文章将详细探讨Spring Data Redis的...

    Spring boot 和 Redis集成例子.zip

    除此之外,Spring Data Redis还提供了对Redis高级特性的支持,如哈希、列表、集合、有序集合等数据结构的操作。例如,我们可以通过`opsForHash()`方法操作哈希: ```java @Autowired private RedisTemplate, Object...

    springBoot集成redis

    首先,为了在Spring Boot项目中引入Redis,我们需要在`pom.xml`文件中添加Spring Data Redis依赖: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-data-redis ``` 接下来,配置...

    Java_使用Spring Data为JPA MongoDB Neo4j Redis的例子.zip

    在Java开发中,Spring Data是一个强大的框架,它简化了数据访问层的实现,支持多种数据库技术,如JPA(Java Persistence API)、MongoDB、Neo4j和Redis。本压缩包包含的是一个使用Spring Data与这些数据库系统交互的...

    spring与Redis的入门Demo

    4. **创建 Redis 操作接口**:创建一个 RedisRepository 接口,继承自 Spring Data Redis 提供的 CrudRepository,定义你需要的操作方法。 ```java public interface RedisRepository extends CrudRepository, ...

    spring整合redis做缓存用注解实现的完整例子

    然后,定义一个RedisTemplate或StringRedisTemplate的bean,这是Spring Data Redis提供的核心组件,用于操作Redis: ```java @Bean public RedisTemplate, Object&gt; redisTemplate(RedisConnectionFactory ...

    Spring整合Redis代码

    总结来说,整合Spring和Redis能够有效地提升应用性能,通过Spring Data Redis提供的API,我们可以方便地进行键值操作、事务处理、消息订阅等。在实际应用中,根据需求可以进一步优化配置,比如使用Redis的Pipeline或...

    ssm+redis的小例子

    在整合SSM与Redis的过程中,我们通常会利用Spring的数据访问/集成模块(Spring Data Redis)来连接和操作Redis。这需要在Spring配置文件中添加对应的Redis配置,包括Redis服务器的地址、端口、密码等信息。同时,...

    java与redis学习例子

    可能涉及的技术点包括Spring Data Redis模块,用于简化Redis操作;Jedis或Lettuce客户端的使用,如缓存用户会话、实现分布式锁等。通过分析源代码,你可以学习到如何在实际项目中运用Redis提升性能。 4. **SQL脚本*...

    redis-cluster和spring集成,基于cache注解

    1. **依赖添加**:在项目中添加 Spring Data Redis 和 Redis 集群相关的依赖,如 `spring-boot-starter-data-redis` 和 `lettuce-core`。 2. **配置 Redis 链接**:在 `application.properties` 或 `application....

    spring boot redis-jedis

    &lt;artifactId&gt;spring-boot-starter-data-redis &lt;groupId&gt;redis.clients &lt;artifactId&gt;jedis ``` 接下来,我们需要配置Redis连接信息。在`application.yml`或`application.properties`文件中添加如下配置: ```...

Global site tag (gtag.js) - Google Analytics