Flask接口签名sign原理与实例代码浅析
365
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文件内容如下:
javaTest
junit
jedis
spring-context
spring-test
spring-data-redis
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
public RedisTemplate
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate
this.redisTemplate = redisTemplate;
}
/**
* 获取 RedisSerializer
*/
protected RedisSerializer
return redisTemplate.getStringSerializer();
}
}
IUserDao.java
package com.redis.test;
import java.util.List;
public interface IUserDao {
/** 新增 */
Boolean add(User user);
/** 批量新增,pipeline方式 */
Boolean add(List
/** 删除 */
void delete(String key);
/** 批量删除 */
void delete(List
/** 更新 */
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
public Boolean add(final User user) {
Boolean result = redisTemplate.execute(new RedisCallback
public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer
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
Assert.notEmpty(list);
Boolean result = redisTemplate.execute(new RedisCallback
public Boolean doInRedis(RedisConnehttp://ction connection) throws DataAccessException {
RedisSerializer
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
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
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
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
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
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
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~