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

<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=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<k, v=""> {
  protected RedisTemplate<k, v=""> redisTemplate;
public RedisTemplate<k, v=""> getRedisTemplate() {
	return redisTemplate;
}
public void setRedisTemplate(RedisTemplate<k, v=""> redisTemplate) {
	this.redisTemplate = redisTemplate;
}
/**
   * 获取 RedisSerializer
   */
protected RedisSerializer<string> 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<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序列化成key
			byte[] 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序列化成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<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序列化成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<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;
/**
 * 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<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);
	}
	/** 批量新增pipeline方式,484ms */
	@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);
	}
}

总结

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

浅谈spring 常用注解

spring中的FactoryBean代码示例

浅谈Spring的两种配置容器

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

(0)

相关推荐

  • 详解SpringBoot集成Redis来实现缓存技术方案

    概述 在我们的日常项目开发过程中缓存是无处不在的,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,今天主要介绍的是使用现在非常流行的NoSQL数据库(Redis)来实现我们的缓存需求. Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件,Redis 的优势包括它的速度.支持丰富的数据类型.操作原子性,以及它的通用性. 案例整合 本案例是在之前一篇SpringBoot + Mybatis + RESTful的基础上来集

  • 详解Spring极速集成注解redis实录

    Redis 做为基于内存的 Key-Value 数据库,用来做缓存服务器性价比相当高. 官方推出的面向 Java 的 Client Jedis,提供了很多接口和方法,可以让 Java 操作使用 Redis. Spring Data Redis 为 Spring 团队对 Jedis 进行了封装,集成 Jedis 的一些命令和方法. 本文重点描述集成过程,能让你迅速的通过 spring-data-redis 将 redis 集成到 spring 项目中,毕竟大家都忙的. 1. 添加项目依赖 <!--

  • Spring Boot集成Redis实现缓存机制(从零开始学Spring Boot)

    本文章牵涉到的技术点比较多:spring Data JPA.Redis.Spring MVC,Spirng Cache,所以在看这篇文章的时候,需要对以上这些技术点有一定的了解或者也可以先看看这篇文章,针对文章中实际的技术点在进一步了解(注意,您需要自己下载Redis Server到您的本地,所以确保您本地的Redis可用,这里还使用了MySQL数据库,当然你也可以内存数据库进行测试).这篇文章会提供对应的Eclipse代码示例,具体大体的分如下几个步骤: (1)新建Java Maven Pro

  • 详解Redis 缓存 + Spring 的集成示例

    <整合 spring 4(包括mvc.context.orm) + mybatis 3 示例>一文简要介绍了最新版本的 Spring MVC.IOC.MyBatis ORM 三者的整合以及声明式事务处理.现在我们需要把缓存也整合进来,缓存我们选用的是 Redis,本文将在该文示例基础上介绍 Redis 缓存 + Spring 的集成. 1. 依赖包安装 pom.xml 加入: <!-- redis cache related.....start --> <dependency

  • Spring Boot Redis 集成配置详解

    spring Boot 熟悉后,集成一个外部扩展是一件很容易的事,集成Redis也很简单,看下面步骤配置: 一.添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> 二.创建 RedisClient.java 注意该类存放的pack

  • 详解Spring-Boot集成Spring session并存入redis

    spring Session 提供了一套用于管理用户 session 信息的API和实现. Spring Session为企业级Java应用的session管理带来了革新,使得以下的功能更加容易实现: 编写可水平扩展的原生云应用. 将session所保存的状态卸载到特定的外部session存储中,如Redis或Apache Geode中,它们能够以独立于应用服务器的方式提供高质量的集群. 当用户使用WebSocket发送请求的时候,能够保持HttpSession处于活跃状态. 在非Web请求的处

  • Spring集成Redis详解代码示例

    本文章从头开始介绍Spring集成Redis的示例. Eclipse工程结构 如下图为我的示例工程的结构图,采用Maven构建.其中需要集成Spring,因此需要beans.xml文件配置spring的依赖注入,redis.properties配置连接服务器的配置信息. 其中工程中beans.xml和redis.properties文件直接放在了根目录,有需要的读者可以放到resource目录中. POM依赖 如下为示例POM依赖,Spring集成redis需要依赖的包为:jedis包,spri

  • Java SpringBoot 集成 Redis详解

    目录 1.概述 Redis是什么? Redis能该干什么? 特性 2.测试Redis 3.自定义redisTemplate 1.概述 Redis是什么? Redis(Remote Dictionary Server ),即远程字典服务. 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加

  • Spring Boot示例代码整合Redis详解

    目录 Redis 简介 Redis 优势 Redis与其他key-value存储有什么不同 添加Redis依赖包 配置Redis数据库连接 编写Redis操作工具类 测试 Redis 简介 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用. Redis不仅仅支持简单的key-value类型的数据

  • 详解Spring集成Redis的两种方式

    目录 一.使用Jedis方式集成 1.增加依赖 2.配置项 3.配置连接池 4.测试 使用spring-data-redis 1.引入依赖 2.配置项 3.使用 4.可能会遇到的坑 哨兵和集群 总结: 在工作中,我们用到分布式缓存的时候,第一选择就是Redis,今天介绍一下SpringBoot如何集成Redis的,分别使用Jedis和Spring-data-redis两种方式. 一.使用Jedis方式集成 1.增加依赖 <!-- spring-boot-starter-web不是必须的,这里是为

  • spring集成redis cluster详解

    客户端采用最新的jedis 2.7 1.maven依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.3</version> </dependency> 2.增加spring 配置 <bean name="genericObjectPoolConfig"

  • Spring cloud config集成过程详解

    这篇文章主要介绍了spring cloud config集成过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Spring Cloud Config 分为 Config Server: 分布式配置中心,是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息 Config Client: 通过指定配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息 Spring boot版本2.1.8.

  • AngularJs bootstrap详解及示例代码

    AngularJs学习笔记系列第一篇,希望我可以坚持写下去.本文内容主要来自 http://docs.angularjs.org/guide/ 文档的内容,但也加入些许自己的理解与尝试结果. 一.总括 本文用于解释Angular初始化的过程,以及如何在你有需要的时候对Angular进行手工初始化. 二.Angular <script> 标签 本例用于展示如何通过推荐的路径整合Angular,实现自动初始化. <!doctype html> <html xmlns:ng=&qu

  • Spring组件自动扫描详解及实例代码

    Spring组件自动扫描详解及实例代码 问题描述 一个系统往往有成千上万的组件,如果需要手动将所有组件都纳入spring容器中管理,是一个浩大的工程. 解决方案 Spring 提供组件扫描(component scanning)功能.它能从classpath里自动扫描.侦测和实例化具有特定注解的组件.基本的注解是@Component,它标识一个受Spring管理的组件.其他特定的注解有@Repository.@Service和@Controller,它们分别标识了持久层.服务处和表现层的组件.

  • Spring Web MVC和Hibernate的集成配置详解

    网上看到很多关于Spring与Hibernate的集成的文章,奈何由于那些文章写作时间较早,很多都是Spring 3 和Hibernate 4等较旧的版本.所以我在这里使用更新的版本来说明一下. 添加项目依赖 首先我们需要一个Java Web项目,最好使用Maven或Gradle构建工具,方便我们解决软件依赖.我在这里使用Gradle构建工具,构建脚本如下.我们只要引入spring-webmvc和spring-orm这两个包,其他的Spring依赖会自动由构建工具解决.然后还需要引入数据源.Hi

  • spring使用redis操作key-value的示例代码

    连接到 Redis Redis 连接工厂会生成到 Redis 数据库服务器的连接.Spring Data Redis 为四种 Redis 客户端实现提供了连接工厂: JedisConnectionFactory JredisConnectionFactory LettuceConnectionFactory SrpConnectionFactory 具体选择哪一个取决于你.我建议你自行测试并建立基准,进而确定哪一种 Redis 客户端和连接工厂最适合你的需求.从 Spring Data Redi

随机推荐