Redis如何在Spring中使用

本篇文章为大家展示了redis如何在Spring中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

成都创新互联公司主要从事成都网站建设、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务盐池,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

Eclipse工程结构

如下图为我的示例工程的结构图,采用Maven构建。其中需要集成Spring,因此需要beans.xml文件配置spring的依赖注入,redis.properties配置连接服务器的配置信息。

Redis如何在Spring中使用

其中工程中beans.xml和redis.properties文件直接放在了根目录,有需要的读者可以放到resource目录中。

POM依赖

如下为示例POM依赖,Spring集成redis需要依赖的包为:jedis包,spring-context模块及依赖的包,spring-data-redis模块包,spring-test包用于JUnit测试,pom.xml文件内容如下:


  4.0.0
 
  com.test
  JavaTest
  0.0.1-SNAPSHOT
  jar
 
  JavaTest
  https://maven.apache.org
 
  
    UTF-8
  
 
  
    
      junit
      junit
      4.12
      test
    
    
      redis.clients
      jedis
      2.5.1
    
    
      org.springframework
      spring-context
      4.2.6.RELEASE
      runtime
    
    
      org.springframework
      spring-test
      4.2.6.RELEASE
      runtime
    
    
      org.springframework.data
      spring-data-redis
      1.7.2.RELEASE
    
  

Spring配置

Spring配置文件beans.xml的配置如下:

 
 
  
  
 
   
    
    
   
 
   
 
  
   
    
  
 
  
     
  
 

在beans.xml配置文件中,需要先加载redis.properties文件。

Redis配置信息

Redis的配置信息在redis.properties文件中配置:

# Redis地址和端口和连接密码
redis.host=localhost
redis.port=6379
redis.pass=
 
redis.maxIdle=300
redis.testOnBorrow=true

此示例,连接Redis服务器时没有设置连接密码,因此不用填值。

Java代码

User.java

package com.redis.test;
import java.io.Serializable;
public class User implements Serializable {
	private static final long serialVersionUID = 3409768855488864675L;
	private String id;
	private String name;
	private String password;
	public User() {
	}
	public User(String id, String name, String password) {
		this.id = id;
		this.name = name;
		this.password = password;
	}
	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;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
	}
}

AbstractRedisBaseDao.java

package com.redis.test;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
public abstract class AbstractRedisBaseDao {
  protected RedisTemplate redisTemplate;
public RedisTemplate getRedisTemplate() {
	return redisTemplate;
}
public void setRedisTemplate(RedisTemplate redisTemplate) {
	this.redisTemplate = redisTemplate;
}
/**
   * 获取 RedisSerializer
   */
protected RedisSerializer getRedisSerializer() {
	return redisTemplate.getStringSerializer();
}
}

IUserDao.java

package com.redis.test;
import java.util.List;
public interface IUserDao {
	/** 新增 */
	Boolean add(User user);
	/** 批量新增,pipeline方式 */
	Boolean add(List list);
	/** 删除 */
	void delete(String key);
	/** 批量删除 */
	void delete(List keys);
	/** 更新 */
	Boolean update(User user);
	/** 读取 */
	User get(String keyId);
}

UserDao.java

package com.redis.test;
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;
public class UserDao extends AbstractRedisBaseDao implements IUserDao {
  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());
			// 将ID序列化成key
			byte[] value = serializer.serialize(user.getName());
			return connection.setNX(key, value);
		}
	}
	);
	return result;
}
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 (int i = 0; i < list.size(); i++) {
				User user = list.get(i);
				byte[] key = serializer.serialize(user.getId());
				// 将ID序列化成key
				byte[] value = serializer.serialize(user.getName());
				connection.setNX(key, value);
			}
			return true;
		}
	}
	, false, true);
	return result;
}
public void delete(String key) {
	redisTemplate.delete(key);
}
public void delete(List keys) {
	redisTemplate.delete(keys);
}
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());
			// 将ID序列化成key
			byte[] value = serializer.serialize(user.getName());
			connection.set(key, value);
			return true;
		}
	}
	);
	return result;
}
public User get(final String keyId) {
	User user = 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 user;
}
}

RedisTest.java(JUnit测试类)

package com.redis.test;
import java.util.ArrayList;
import java.util.List;
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 org.springframework.util.Assert;
/**
 * junit在Spring context环境下测试
 */
@ContextConfiguration(locations={"classpath*:beans.xml"})
public class RedisTest extends AbstractJUnit4SpringContextTests {
	@Autowired
	  private IUserDao userDao;
	/** 增加单个用户 */
	@Test
	  public void testAddUser() {
		User user = new User("user1", "password1", null);
		Boolean result = userDao.add(user);
		Assert.isTrue(result);
		System.out.println("添加结果:" + result);
	}
	/** 批量新增普通方式,5286ms */
	@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("password" + i);
			list.add(user);
		}
		long begin = System.currentTimeMillis();
		for (User user : list) {
			userDao.add(user);
		}
		System.out.println(System.currentTimeMillis() - begin);
	}
	/** 批量新增pipeline方式,484ms */
	@Test
	  public void testAddUsers2() {
		List list = new ArrayList();
		for (int i = 50000; i < 100000; i++) {
			User user = new User();
			user.setId("user" + i);
			user.setName("password" + i);
			list.add(user);
		}
		long begin = System.currentTimeMillis();
		Boolean result = userDao.add(list);
		Assert.isTrue(result);
		System.out.println(System.currentTimeMillis() - begin);
	}
	/** 更新 */
	@Test
	  public void testUpdate() {
		User user = new User();
		user.setId("user1");
		user.setName("new_password");
		Boolean result = userDao.update(user);
		Assert.isTrue(result);
	}
	/** 删除 */
	@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.notNull(user);
		System.out.println(user);
	}
}

上述内容就是Redis如何在Spring中使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


当前名称:Redis如何在Spring中使用
当前网址:http://scyanting.com/article/jepsog.html