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;  
            }  
        });  
	}    
}

猜你喜欢

转载自jsjrjz08.iteye.com/blog/2253287
今日推荐