Redis之——Spring整合Redis

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52108758

        做过大型软件系统的同学都知道,随着系统数据越来越庞大,越来越复杂,随之带来的问题就是系统性能越来越差,尤其是频繁操作数据库带来的性能损耗更为严重。很多业绩大牛为此提出了众多的解决方案和开发了很多框架以优化这种频繁操作数据库所带来的性能损耗,其中,尤为突出的两个缓存服务器是Memcached和Redis。今天,我们不讲Memcached和Redis本身,这里主要为大家介绍如何使Spring与Redis整合。有关Memcached与Spring整合的博文请参见《Memcached之——整合Spring完整示例》。好,我们进入正文:

1、pom构建



  4.0.0
  com.x.redis
  springredis
  0.0.1-SNAPSHOT
  
  
  	
  		org.springframework.data
  		spring-data-redis
  		1.0.2.RELEASE
  	
  	
  		org.springframework
  		spring-test
  		3.1.2.RELEASE
  		test
  	
  	
  	
  		redis.clients
  		jedis
  		2.1.0
  	
  	
  	 
  		junit
  		junit
  		4.8.2
  		test
  	
  

2、spring配置文件(applicationContext.xml)




	

	
		
		
		
		
	
	
	
	
	
		
			
	
	 

3、redis.properties

# Redis settings
redis.host=192.168.157.130
redis.port=6379
redis.pass=liuyazhuang


redis.maxIdle=300
redis.maxActive=600
redis.maxWait=1000
redis.testOnBorrow=true

4、User实体类

package com.lyz.entity;

import java.io.Serializable;

/**
 * user实体类
 * @author liuyazhuang
 *
 */
public class User implements Serializable {
	
	private static final long serialVersionUID = -6011241820070393952L;

	private String id;
	
	private String name;
	
	private String password;

	/**
	 * 
------------------------------
*/ public User() { } /** *
------------------------------
*/ public User(String id, String name, String password) { super(); this.id = id; this.name = name; this.password = password; } /** * 获得id * @return the id */ public String getId() { return id; } /** * 设置id * @param id the id to set */ public void setId(String id) { this.id = id; } /** * 获得name * @return the name */ public String getName() { return name; } /** * 设置name * @param name the name to set */ public void setName(String name) { this.name = name; } /** * 获得password * @return the password */ public String getPassword() { return password; } /** * 设置password * @param password the password to set */ public void setPassword(String password) { this.password = password; } }

5、User操作的接口IUserDao

package com.lyz.dao;

import java.util.List;

import com.lyz.entity.User;
 
/**
 * user操作接口
 * @author liuyazhuang
 *
 */
public interface IUserDao {
	
	/**
	 * 新增
	 * 
------------------------------
* @param user * @return */ boolean add(User user); /** * 批量新增 使用pipeline方式 *
------------------------------
* @param list * @return */ boolean add(List list); /** * 删除 *
------------------------------
* @param key */ void delete(String key); /** * 删除多个 *
------------------------------
* @param keys */ void delete(List keys); /** * 修改 *
------------------------------
* @param user * @return */ boolean update(User user); /** * 通过key获取 *
------------------------------
* @param keyId * @return */ User get(String keyId); }

6、基本的抽象类

package com.lyz.dao.impl;

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


/**
 * 基本的抽象类
 * @author liuyazhuang
 *
 * @param 
 * @param 
 */
public abstract class AbstractBaseRedisDao {
	
	@Autowired
	protected RedisTemplate redisTemplate;

	/**
	 * 设置redisTemplate
	 * @param redisTemplate the redisTemplate to set
	 */
	public void setRedisTemplate(RedisTemplate redisTemplate) {
		this.redisTemplate = redisTemplate;
	}
	
	/**
	 * 获取 RedisSerializer
	 * 
------------------------------
*/ protected RedisSerializer getRedisSerializer() { return redisTemplate.getStringSerializer(); } }

7、IUserDao的实现类UserDaoImpl

package com.lyz.dao.impl;

import java.util.ArrayList;
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.util.Assert;

import com.lyz.dao.IUserDao;
import com.lyz.entity.User;

 
/**
 * 	接口的实现类
 * @author liuyazhuang
 *
 */
public class UserDaoImpl extends AbstractBaseRedisDao implements IUserDao {

	/** 
	 * 新增
	 *
------------------------------
* @param user * @return */ public boolean add(final User user) { boolean result = redisTemplate.execute(new RedisCallback() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer serializer = getRedisSerializer(); byte[] key = serializer.serialize(user.getId()); byte[] name = serializer.serialize(user.getName()); return connection.setNX(key, name); } }); return result; } /** * 批量新增 使用pipeline方式 *
------------------------------
*@param list *@return */ public boolean add(final List list) { Assert.notEmpty(list); boolean result = redisTemplate.execute(new RedisCallback() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer serializer = getRedisSerializer(); for (User user : list) { byte[] key = serializer.serialize(user.getId()); byte[] name = serializer.serialize(user.getName()); connection.setNX(key, name); } return true; } }, false, true); return result; } /** * 删除 *
------------------------------
* @param key */ public void delete(String key) { List list = new ArrayList(); list.add(key); delete(list); } /** * 删除多个 *
------------------------------
* @param keys */ public void delete(List keys) { redisTemplate.delete(keys); } /** * 修改 *
------------------------------
* @param user * @return */ public boolean update(final User user) { String key = user.getId(); if (get(key) == null) { throw new NullPointerException("数据行不存在, key = " + key); } boolean result = redisTemplate.execute(new RedisCallback() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer serializer = getRedisSerializer(); byte[] key = serializer.serialize(user.getId()); byte[] name = serializer.serialize(user.getName()); connection.set(key, name); return true; } }); return result; } /** * 通过key获取 *
------------------------------
* @param keyId * @return */ public User get(final String keyId) { User result = redisTemplate.execute(new RedisCallback() { public User doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer serializer = getRedisSerializer(); byte[] key = serializer.serialize(keyId); byte[] value = connection.get(key); if (value == null) { return null; } String name = serializer.deserialize(value); return new User(keyId, name, null); } }); return result; } }

8、测试类RedisTest

package com.lyz.test;
import java.util.ArrayList;
import java.util.List;

import junit.framework.Assert;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;

import com.lyz.dao.IUserDao;
import com.lyz.entity.User;


/**
 * Redis测试类
 * @author liuyazhuang
 *
 */
@ContextConfiguration(locations = {"classpath*:applicationContext.xml"})
public class RedisTest extends AbstractJUnit4SpringContextTests {
	
	@Autowired
	private IUserDao userDao;
	
	/**
	 * 新增
	 * 
------------------------------
*/ @Test public void testAddUser() { User user = new User(); user.setId("user1"); user.setName("liuyazhuang"); boolean result = userDao.add(user); Assert.assertTrue(result); } /** * 批量新增 普通方式 *
------------------------------
*/ @Test public void testAddUsers1() { List list = new ArrayList(); for (int i = 10; i < 50000; i++) { User user = new User(); user.setId("user" + i); user.setName("liuyazhuang" + i); list.add(user); } long begin = System.currentTimeMillis(); for (User user : list) { userDao.add(user); } System.out.println(System.currentTimeMillis() - begin); } /** * 批量新增 pipeline方式 *
------------------------------
*/ @Test public void testAddUsers2() { List list = new ArrayList(); for (int i = 10; i < 1500000; i++) { User user = new User(); user.setId("user" + i); user.setName("liuyazhuang" + i); list.add(user); } long begin = System.currentTimeMillis(); boolean result = userDao.add(list); System.out.println(System.currentTimeMillis() - begin); Assert.assertTrue(result); } /** * 修改 *
------------------------------
*/ @Test public void testUpdate() { User user = new User(); user.setId("user1"); user.setName("liuyazhuang"); boolean result = userDao.update(user); Assert.assertTrue(result); } /** * 通过key删除单个 *
------------------------------
*/ @Test public void testDelete() { String key = "user1"; userDao.delete(key); } /** * 批量删除 *
------------------------------
*/ @Test public void testDeletes() { List list = new ArrayList(); for (int i = 0; i < 10; i++) { list.add("user" + i); } userDao.delete(list); } /** * 获取 *
------------------------------
*/ @Test public void testGetUser() { String id = "user1"; User user = userDao.get(id); Assert.assertNotNull(user); Assert.assertEquals(user.getName(), "liuyazhuang"); } /** * 设置userDao * @param userDao the userDao to set */ public void setUserDao(IUserDao userDao) { this.userDao = userDao; } }

9、温馨提示

大家可以到链接http://download.csdn.net/detail/l1028386804/9594350下载完整的Spring整合Redis实例源码。

你可能感兴趣的:(Redis,Redis)