`

Spring与Redis整合

阅读更多

commons-lang3-3.1.jar

spring-data-commons-1.11.0.jar

spring-data-redis-1.6.1.jar

jedis-2.6.0.jar

spring-XX-4.0.6.jar

 

在spring的beans.xml中添加:

    <!-- 对象池 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle" value="${redis.maxIdle}" />  
        <!-- <property name="maxActive" value="${redis.maxActive}" /> -->  
        <!-- <property name="maxWait" value="${redis.maxWait}" /> -->  
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
    </bean>  

    <!-- 工厂实现 -->  
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">  
        <property name="hostName" value="${redis.host}" />  
        <property name="port" value="${redis.port}" />   
        <!-- <property name="password" value="${redis.pass}" />  -->  
        <property name="poolConfig" ref="jedisPoolConfig" />  
    </bean>  

    <!-- 模板类 --> 
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
        <property name="connectionFactory" ref="jedisConnectionFactory"/>
        <property name="keySerializer">
        	<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
        </property>
        <property name="valueSerializer"> <!-- default:JdkSerializationRedisSerializer -->
        	<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
        </property>
    </bean>

 

service实现层:

package com.edus.service.impl.demo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import javax.annotation.Resource;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import com.edus.entity.Book;
import com.edus.service.demo.IRedisDemoService;

@Service("redisDemoService")
public class RedisDemoServiceImpl implements IRedisDemoService {

	@Resource
    private RedisTemplate<Serializable, Serializable> redisTemplate;

	private static String PREFIX_USER = "book:";
	
	
	@Override
	public void delBookInRedis(Integer id) {
		redisTemplate.opsForHash().delete(PREFIX_USER+id, id);
	}

	@Override
	public Book getBookFromRedis(final Integer id) {
//		redisTemplate.multi();
//		redisTemplate.opsForHash().put(PREFIX_USER+id, "id", id);
		Book book = (Book)redisTemplate.opsForHash().get(PREFIX_USER+id, id);
//		System.out.println(book);
//		redisTemplate.exec();
		return book;
	}

	@Override
	public void saveOrUpdateBookInRedis(final Book book) {
//		System.out.println("1xxxx="+redisTemplate.getConnectionFactory().getClass().getName());
//		System.out.println("1default="+redisTemplate.getDefaultSerializer().getClass().getName());
//		System.out.println("1key="+redisTemplate.getKeySerializer().getClass().getName());
//		System.out.println("1value="+redisTemplate.getValueSerializer().getClass().getName());
		
		//开启事务
//		redisTemplate.multi();
		redisTemplate.opsForHash().put(PREFIX_USER+book.getId(), book.getId(), book);
//		redisTemplate.exec();
		
		
	}

	@Override
	public Set<Book> findBookListInRedis(Map<String, Object> args) {
		Set<Serializable> keySet = redisTemplate.keys(PREFIX_USER+"*");
		Set<Book> resultSet = new HashSet<Book>();
		for(Object key : keySet) {
			Integer id = Integer.parseInt(key.toString().split(":")[1]);
        	Book book = getBookFromRedis(id);
        	resultSet.add(book);
			System.out.println(book);
		}
		return resultSet;
	}
    
}

 

 或:

package com.edus.service.impl.demo;

import java.io.Serializable;

import javax.annotation.Resource;

import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.stereotype.Service;

import com.edus.entity.Book;
import com.edus.service.demo.IRedisDemoService;

@Service("redisDemoService")
public class RedisDemoServiceImpl implements IRedisDemoService {

	@Resource
    protected RedisTemplate<Serializable, Serializable> redisTemplate;
	
	@Override
	public void delBookInRedis(final Integer id) {
		redisTemplate.execute(new RedisCallback<Object>() {  
	        @Override  
	        public Object doInRedis(RedisConnection connection) {  
	            connection.del(redisTemplate.getStringSerializer().serialize("book.id." + id)); 
	            connection.del(redisTemplate.getStringSerializer().serialize("book.price." + id)); 
	            connection.del(redisTemplate.getStringSerializer().serialize("book.name." + id)); 
	            return null;  
	        }  
	    });
	}

	@Override
	public Book findOneBookInRedis(final Integer id) {
		return redisTemplate.execute(new RedisCallback<Book>() {  
	        @Override  
	        public Book doInRedis(RedisConnection connection)  
	                throws DataAccessException {  
	            byte[] bid = redisTemplate.getStringSerializer().serialize(  
	                    "book.id." + id);  
	            if (connection.exists(bid)) {  
	            	byte[] nameByte = redisTemplate.getStringSerializer().serialize(  
		                    "book.name." + id);
	                byte[] nameVal = connection.get(nameByte);  
	                String name = redisTemplate.getStringSerializer().deserialize(nameVal); 

	                byte[] priceByte = redisTemplate.getStringSerializer().serialize(  
		                    "book.price." + id);
	                byte[] priceVal = connection.get(priceByte);  
	                String price = redisTemplate.getStringSerializer().deserialize(priceVal); 
	                
	                Book book = new Book();
	                book.setId(id);
	                book.setName(name);
	                book.setPrice(Double.parseDouble(price));
	                return book;  
	            }  
	            return null;  
	        }  
	    });  
	}

	@Override
	public boolean  saveBookInRedis(final Book book) {
		return redisTemplate.execute(new RedisCallback<Boolean>() {  
	        @Override  
	        public Boolean doInRedis(RedisConnection connection)  
	                throws DataAccessException {  
	        	//connection.hSet(arg0, arg1, arg2)
	            connection.set(  
	                    redisTemplate.getStringSerializer().serialize( "book.id." + book.getId()),  
	                    redisTemplate.getStringSerializer().serialize( String.valueOf(book.getId()))); 
	            connection.set(  
	                    redisTemplate.getStringSerializer().serialize( "book.name." + book.getId()),  
	                    redisTemplate.getStringSerializer().serialize( book.getName()));
	            connection.set(  
	                    redisTemplate.getStringSerializer().serialize( "book.price." + book.getId()),  
	                    redisTemplate.getStringSerializer().serialize( String.valueOf(book.getPrice()))); 
	            return true;  
	        }  
	    }); 
	}

	@Override
	public boolean updateBookInRedis(final Book book) {
		Integer key = book.getId();  
        if (this.findOneBookInRedis(key) == null) {  
            throw new NullPointerException("数据行不存在, book.id = " + key);  
        }  
        return redisTemplate.execute(new RedisCallback<Boolean>() {  
            public Boolean doInRedis(RedisConnection connection)  
                    throws DataAccessException {  
//            	if(book.getName() != null && book.getName().length() > 0) {
	                byte[] key  = redisTemplate.getStringSerializer().serialize("book.name."+String.valueOf(book.getId()));  
	                byte[] name = redisTemplate.getStringSerializer().serialize(book.getName());  
	                connection.set(key, name);  
//            	}
            	if(book.getPrice() != null) {
	                byte[] key  = redisTemplate.getStringSerializer().serialize("book.name."+String.valueOf(book.getId()));  
	                byte[] name = redisTemplate.getStringSerializer().serialize(book.getName());  
	                connection.set(key, name);  
            	}
                return true;  
            }  
        });  
	}    
}

 

 

 

 

分享到:
评论

相关推荐

    spring整合redis

    一、Spring与Redis整合的背景及优势 Spring框架提供了丰富的集成支持,使得与其他技术的整合变得非常方便。整合Spring和Redis可以带来以下好处: 1. 提高性能:Redis作为内存数据库,读写速度极快,适合处理大量...

    Spring+redis整合demo2

    本文将深入探讨如何将Spring与Redis整合,以实现高效的数据管理。 首先,Spring对Redis的支持主要通过Spring Data Redis模块实现。这个模块提供了对Redis操作的抽象,使得开发者可以方便地在Spring应用中集成Redis...

    redis与spring的整合

    将Redis与Spring整合,可以充分利用Redis的高速缓存能力,提升应用程序的性能。本文将详细介绍如何在Spring应用中集成Redis,以及如何操作String、list、set、map四种基本数据类型。 一、整合步骤 1. **环境配置**...

    spring+redis整合

    这个"spring+redis整合"项目展示了如何利用Spring框架和Redis数据库来实现一个高效的、高可用的登录系统,其中会话(Session)由Redis进行管理,同时支持通过Nginx进行负载均衡。以下是关于这一主题的详细知识讲解。...

    spring+redis整合用例

    在IT行业中,Spring框架与Redis的整合是常见的数据存储与缓存解决方案,尤其适用于高并发、数据读写频繁的应用场景。下面将详细讲解这个主题,包括Spring如何与Redis进行集成,以及它们各自的关键特性。 首先,...

    Redis和Spring的整合包

    这个"Redis+spring-data-redis jar包"整合包就是为了解决将Redis与Spring框架无缝结合的需求。 在Spring框架中整合Redis,首先需要引入`spring-data-redis`的依赖,这个jar包包含了Spring对Redis的各种支持。Jedis...

    spring整合redis项目

    综上所述,"spring整合redis项目"主要涵盖了Spring与Redis的集成,包括配置、API使用、测试以及缓存管理等多个方面。通过这样的整合,开发者可以充分利用Redis的性能优势,提高应用的响应速度和并发能力。

    Spring+Redis整合例子

    下面我们将深入探讨Spring与Redis的整合过程及其相关知识点。 1. **Spring Data Redis** Spring Data Redis是Spring框架的一个模块,旨在简化Redis操作。它提供了RedisTemplate和StringRedisTemplate两个核心模板...

    Spring mvc整合redis实例(redis连接池)

    将Spring MVC与Redis结合,可以有效提升应用的响应速度和数据处理能力。本文将详细介绍如何在Spring MVC中整合Redis,并利用连接池来优化性能。 首先,我们需要引入Redis的相关依赖。在Maven项目中,可以在pom.xml...

    spring+redis整合demo

    本文将详细解析"spring+redis整合demo"中的关键知识点,帮助你理解如何将Spring与Redis结合使用。 1. **Spring框架**:Spring是一个开源的Java平台,它简化了开发过程,提供了全面的编程和配置模型。Spring的核心...

    Spring3.0整合redis相关jar

    将Spring与Redis进行整合,可以有效地提升应用的性能和响应速度,特别是在数据读写频繁的应用中。 "Spring3.0整合redis相关jar"这个主题主要涉及的是如何在Spring 3.0版本中集成Redis作为数据存储或缓存解决方案。...

    Spring整合Redis完整实例代码

    &lt;artifactId&gt;springredis &lt;version&gt;0.0.1-SNAPSHOT &lt;groupId&gt;org.springframework.data &lt;artifactId&gt;spring-data-redis &lt;version&gt;1.0.2.RELEASE &lt;!-- 其他依赖,如 Jedis、Spring Test、JUnit 等 --&gt; ...

    spring + redis + sentinel 配置

    在这个"spring + redis + sentinel"配置中,我们将探讨如何整合这三个组件以创建一个稳定且高度可用的缓存系统。 首先,`redis.properties`文件是Spring与Redis连接的关键配置文件。在该文件中,通常会包含以下内容...

    SpringRedis整合源码

    本文将深入探讨Spring与Redis整合的源码层面,帮助你理解这一过程中的关键技术和实现细节。 首先,Spring通过`spring-data-redis`模块提供了对Redis的抽象和管理。该模块包含了一系列的RedisTemplate和...

    spring-redis-mysql整合

    7. **数据缓存策略**:在整合Spring、Redis和MySQL时,通常会用Redis作为缓存层,将频繁访问或计算成本高的数据暂存于Redis,减少对MySQL数据库的直接查询,从而提高系统的响应速度和并发能力。 8. **事务管理**:...

    SpringCloud整合Redis

    SpringCloud整合Redis缓存;版本:SpringCloud :Dalston.SR4;SpringBoot:1.5.14.RELEASE;Redis:3.2.0;Maven :3.5.3.代码下载下来即可用

    spring 和redis整合,java代码操作redis,java代码中选择redis制定数据库

    在Java开发中,Spring框架与Redis的整合是一个常见的需求,特别是在构建高性能、高并发的应用时。Redis是一款开源的、基于键值对的数据存储系统,它提供了高速的数据读写能力,适用于缓存、消息队列等多种场景。而...

    spring整合redis小demo

    总的来说,Spring整合Redis使得在Java应用中使用Redis变得更加便捷,无论是简单的字符串操作还是复杂的对象存储,都能通过Spring提供的工具轻松实现。通过上述步骤,你可以构建一个基本的Spring-Redis集成系统,...

    spring-boot mybaits spring security redis整合

    注解redis缓存数据,Spring-session和redis实现分布式session同步(建议按功能模块划分系统)。 6、日志 =========== logback打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 9、...

    spring data redis api jar

    10. **Spring整合**:Spring Data Redis与Spring框架深度集成,支持Spring Boot自动配置,可以快速搭建Redis相关的应用。 使用Spring Data Redis API,开发者可以极大地简化Redis的编程模型,通过面向对象的方式...

Global site tag (gtag.js) - Google Analytics