Redis如何在Spring中使用
本篇文章为大家展示了Redis如何在Spring中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
Eclipse工程结构
如下图为我的示例工程的结构图,采用Maven构建。其中需要集成Spring,因此需要beans.xml文件配置spring的依赖注入,redis.properties配置连接服务器的配置信息。
其中工程中beans.xml和redis.properties文件直接放在了根目录,有需要的读者可以放到resource目录中。
POM依赖
如下为示例POM依赖,Spring集成redis需要依赖的包为:jedis包,spring-context模块及依赖的包,spring-data-redis模块包,spring-test包用于JUnit测试,pom.xml文件内容如下:
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.test</groupid> JavaTest</artifactid> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>JavaTest</name> <url>https://maven.apache.org</url> <properties> <project.build.sourceencoding>UTF-8</project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid>junit</groupid> junit</artifactid> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupid>redis.clients</groupid> jedis</artifactid> <version>2.5.1</version> </dependency> <dependency> <groupid>org.springframework</groupid> spring-context</artifactid> <version>4.2.6.RELEASE</version> <scope>runtime</scope> </dependency> <dependency> <groupid>org.springframework</groupid> spring-test</artifactid> <version>4.2.6.RELEASE</version> <scope>runtime</scope> </dependency> <dependency> <groupid>org.springframework.data</groupid> spring-data-redis</artifactid> <version>1.7.2.RELEASE</version> </dependency> </dependencies></project>
Spring配置
Spring配置文件beans.xml的配置如下:
<!--?xml version="1.0" encoding="UTF-8"?--> <beans xmlns="https://www.springframework.org/schema/beans" xmlns:aop="https://www.springframework.org/schema/aop" xmlns:context="https://www.springframework.org/schema/context" xmlns:jee="https://www.springframework.org/schema/jee" xmlns:p="https://www.springframework.org/schema/p" xmlns:tx="https://www.springframework.org/schema/tx" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation=" https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 加载classpath下的Redis配置文件 --> <context:property-placeholder location="classpath:redis.properties"> <bean class="redis.clients.jedis.JedisPoolConfig" id="poolConfig"> <property name="maxIdle" value="${redis.maxIdle}"> <property name="testOnBorrow" value="${redis.testOnBorrow}"> </property></property></bean> <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" id="connectionFactory" p:host-name="${redis.host}" p:password="${redis.pass}" p:pool-config-ref="poolConfig" p:port="${redis.port}"> <!-- spring提供的模板类 --> <bean class="org.springframework.data.redis.core.StringRedisTemplate" id="redisTemplate"> <property name="connectionFactory" ref="connectionFactory"> </property></bean> <bean class="com.redis.test.UserDao" id="userDao"> <property name="redisTemplate" ref="redisTemplate"> </property></bean> </bean></context:property-placeholder></beans>
在beans.xml配置文件中,需要先加载redis.properties文件。
Redis配置信息
Redis的配置信息在redis.properties文件中配置:
# Redis地址和端口和连接密码redis.host=localhostredis.port=6379redis.pass= redis.maxIdle=300redis.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<k, v=""> { 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();}}
IUserDao.java
package com.redis.test;import java.util.List;public interface IUserDao {Boolean add(User user);Boolean add(List<user> list);void delete(String key);void delete(List<string> 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<string, user=""> implements IUserDao { public Boolean add(final User user) {Boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {public Boolean doInRedis(RedisConnection connection) throws DataAccessException {RedisSerializer<string> serializer = getRedisSerializer();byte[] key = serializer.serialize(user.getId());// 将ID序列化成keybyte[] value = serializer.serialize(user.getName());return connection.setNX(key, value);}});return result;}public Boolean add(final List<user> list) {Assert.notEmpty(list);Boolean result = redisTemplate.execute(new RedisCallback<Boolean>() {public Boolean doInRedis(RedisConnection connection) throws DataAccessException {RedisSerializer<string> serializer = getRedisSerializer();for (int i = 0; i < list.size(); i++) {User user = list.get(i);byte[] key = serializer.serialize(user.getId());// 将ID序列化成keybyte[] 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<string> 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<Boolean>() {public Boolean doInRedis(RedisConnection connection) throws DataAccessException {RedisSerializer<string> serializer = getRedisSerializer();byte[] key = serializer.serialize(user.getId());// 将ID序列化成keybyte[] 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<user>() {public User doInRedis(RedisConnection connection) throws DataAccessException {RedisSerializer<string> 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;@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);}@Test public void testAddUsers1() {List<user> list = new ArrayList<user>();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);}@Test public void testAddUsers2() {List<user> list = new ArrayList<user>();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<string> list = new ArrayList<string>();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中使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341