Spring集成Redis详解代码示例

网友投稿 355 2023-03-16


Spring集成Redis详解代码示例

本文章从头开始介绍Spring集成Redis的示例。

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文件内容如下:

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(RedisConnehttp://ction 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 RedisCallwEHVYback() {

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

}

}

总结

以上就是本文关于Spring集成Redis详解代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

浅谈spring 常用注解

spring中的FactoryBean代码示例

浅谈Spring的两种配置容器

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot四大神器之Actuator的使用小结
下一篇:API接口文档免费(api接口怎么编写)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~