学习 Redis

学习 Redis

package com.x.bean;

import java.io.Serializable;

public class User implements Serializable {
	
	private static final long serialVersionUID = 1L;
	private String id;
	private String name;
	
	public User() {
		
	}
	
	public User(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}
package com.x.dao;

import java.util.List;

import com.x.bean.User;

public interface IUserDao {
	
	public boolean insert(User user);
	
	public boolean insert(List<User> userList);
	
	public boolean delete(String key);
	
	public boolean delete(List<String> keys);
	
	public boolean update(User user);
	
	public User find(String keyId);

}
package com.x.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

public class RedisBaseDao<K, V> {
	
	@Autowired
	protected RedisTemplate<K, V> redisTemplate;

	public RedisTemplate<K, V> getRedisTemplate() {
		return redisTemplate;
	}

	public void setRedisTemplate(RedisTemplate<K, V> redisTemplate) {
		this.redisTemplate = redisTemplate;
	}
	
	protected RedisSerializer<String> getRedisSerializer() {
		return redisTemplate.getStringSerializer();
	}

}
package com.x.dao;

import java.util.List;

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

import com.x.bean.User;

@Repository
public class UserDaoImpl extends RedisBaseDao<String, User> implements IUserDao {
	
	@Override
	public boolean insert(User user) {
		boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
			@Override
			public Boolean doInRedis(RedisConnection connection)
					throws DataAccessException {
				RedisSerializer<String> serializer = getRedisSerializer();
				byte[] key = serializer.serialize(user.getId());
				byte[] value = serializer.serialize(user.getName());
				return connection.setNX(key, value);
			}
		});
		return result;
	}

	@Override
	public boolean insert(List<User> userList) {
		boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
			public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
				RedisSerializer<String> serializer = getRedisSerializer();
				for (User user : userList) {
					byte[] key = serializer.serialize(user.getId());
					byte[] value = serializer.serialize(user.getName());
					connection.setNX(key, value);
				}
				return true;
			}
		}, false, true);
		return result;
	}

	@Override
	public boolean delete(String key) {
		boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
			@Override
			public Boolean doInRedis(RedisConnection connection)
					throws DataAccessException {
				RedisSerializer<String> serializer = getRedisSerializer();
				byte[] k = serializer.serialize(key);
				return connection.del(k) > 0 ? true : false;
			}
		});
		return result;
	}

	@Override
	public boolean delete(List<String> keys) {
		boolean result = false;
		for (String key : keys) {
			result = delete(key);
		}
		return result;
	}

	@Override
	public boolean update(User user) {
		String key = user.getId();
		if (null == find(key)) {
			throw new NullPointerException("不存在此条数据 key = " + key);
		}
		boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {
			@Override
			public Boolean doInRedis(RedisConnection connection)
					throws DataAccessException {
				RedisSerializer<String> serializer = getRedisSerializer();
				byte[] key = serializer.serialize(user.getId());
				byte[] value = serializer.serialize(user.getName());
				connection.set(key, value);
				return true;
			}
		});
		return result;
	}

	@Override
	public User find(String keyId) {
		User user = redisTemplate.execute(new RedisCallback<User>() {
			@Override
			public User doInRedis(RedisConnection connection)
					throws DataAccessException {
				RedisSerializer<String> serializer = getRedisSerializer();
				byte[] key = serializer.serialize(keyId);
				byte[] value = connection.get(key);
				if (null == value) {
					return null;
				}
				String name = serializer.deserialize(value);
				return new User(keyId, name);
			}
			
		});
		return user;
	}

}
package com.x.test;

import java.util.ArrayList;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.x.bean.User;
import com.x.dao.IUserDao;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:src/main/resources/redis.xml" })
public class RedisTest {
	
	@Autowired
	private IUserDao userDao;
	
	@Test
	public void testInsert() {
		User user = new User();
		user.setId("0001");
		user.setName("Jack");
		boolean result = userDao.insert(user);
		Assert.assertTrue(result);
	}
	
	@Test
	public void testInsertList() {
		List<User> userList = new ArrayList<User>();
		for (int i = 0; i < 5; i++) {
			User user = new User();
			user.setId("user" + i);
			user.setName("userName" + i);
			userList.add(user);
		}
		boolean result = userDao.insert(userList);
		Assert.assertTrue(result);
	}
	
	@Test
	public void testDelete() {
		String key = "user2";
		boolean result = userDao.delete(key);
		Assert.assertTrue(result);
	}
	
	@Test
	public void testDeleteList() {
		List<String> keyList = new ArrayList<String>();
		keyList.add("user3");
		keyList.add("user4");
		boolean result = userDao.delete(keyList);
		Assert.assertTrue(result);
	}
	
	@Test
	public void testUpdate() {
		User user = new User("0001", "Tom");
		boolean result = userDao.update(user);
		Assert.assertTrue(result);
	}
	
	@Test
	public void testFind() {
		String key = "0001";
		User user = userDao.find(key);
		Assert.assertNotNull(user);
		Assert.assertEquals(user.getName(), "Tom");
	}

}
redis.host=127.0.0.1  
redis.port=6379  
redis.pass=123

redis.maxIdle=8  
redis.maxTotal=8   
redis.testOnBorrow=true 
<?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:component-scan base-package="com.x.dao" />
	
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:redis.properties</value>
			</list>
		</property>
	</bean>
	
	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle"      value="${redis.maxIdle}" />  
        <property name="maxTotal"      value="${redis.maxTotal}" />  
        <property name="testOnBorrow" value="${redis.testOnBorrow}" />  
    </bean>
    
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    	<property name="hostName"   value="${redis.host}"></property>
    	<property name="port"       value="${redis.port}"></property>
    	<property name="password"   value="${redis.pass}"></property>
    	<property name="poolConfig" ref="poolConfig"></property>
    </bean>
    
    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">  
        <property name="connectionFactory"   ref="connectionFactory" />  
    </bean> 

</beans>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>redis</groupId>
	<artifactId>reids</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>

		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-redis</artifactId>
			<version>1.8.3.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.9.0</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.3.8.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>compile</scope>
		</dependency>

	</dependencies>

</project>

猜你喜欢

转载自injavawetrust.iteye.com/blog/2371514
今日推荐