`
hbxflihua
  • 浏览: 683339 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

spring-boot集成redis

阅读更多

 

1、pom.xml文件中添加redis依赖

		<!-- Spring Boot redis 依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>

 

2、application.yml中配置redis

spring: 
  redis:
    database: 0
    host: 172.16.90.30
    port: 6379
    password: redis
    timeout: 0
    pool:
      max-active: 8
      max-wait: -1
      max-idle: 8
      min-idle: 0
      
#  redis:
#    cluster:
#      nodes:
#      - 172.16.90.30:7000
#      - 172.16.90.30:7001

 

3、实例化redisTemplate

package com.huatech.supports;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig<T> {
	
	/**
	 * 实例化stringRedisTemplate
	 * @param factory
	 * @return
	 */
	@Bean
	public RedisTemplate<String, String> stringRedisTemplate(RedisConnectionFactory factory) {
		 StringRedisTemplate template = new StringRedisTemplate(factory);
		 return template;
	}

	/**
	 * 实例化RedisTemplate
	 * 
	 * @param factory
	 * @return
	 */
	@Bean
	public RedisTemplate<String, T> redisTemplate(RedisConnectionFactory factory) {
		RedisTemplate<String, T> template = new RedisTemplate<String, T>();
		template.setConnectionFactory(factory);
		template.setKeySerializer(new StringRedisSerializer());
		template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
		template.afterPropertiesSet();
		return template;
	}	
}

 

4、添加redis工具类

package com.huatech.util;

import java.util.concurrent.TimeUnit;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;

import com.huatech.supports.SpringContextHolder;
/**
 * Redis工具类
 * @author lh
 * @version 1.0
 * @since 2017-12-27
 *
 */
public class RedisUtils {
	
	private static StringRedisTemplate stringRedisTemplate = SpringContextHolder.getBean("stringRedisTemplate");
	private static RedisTemplate<String, Object> redisTemplate = SpringContextHolder.getBean("redisTemplate");
	
	public static void set(String key, String value, long timeout) {
		stringRedisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
	}
	
	public static void set(String key, Object value, long timeout) {
		if (value instanceof String) {
			stringRedisTemplate.opsForValue().set(key, value.toString());
		} else if (value instanceof Integer || value instanceof Long) {
			stringRedisTemplate.opsForValue().set(key, value.toString());
		} else if (value instanceof Double || value instanceof Float) {
			stringRedisTemplate.opsForValue().set(key, value.toString());
		} else if (value instanceof Short || value instanceof Boolean) {
			stringRedisTemplate.opsForValue().set(key, value.toString());
		} else {
			redisTemplate.opsForValue().set(key, value);
		}
		if(timeout > 0) {
			expire(key, timeout);
		}
	}
	
	public static boolean setnx(String key, Object value) {
		return redisTemplate.opsForValue().setIfAbsent(key, value);
	}
	
	public static void del(String key) {
		redisTemplate.delete(key);
	}
	
	public static void expire(String key, long timeout) {
		redisTemplate.expire(key, timeout, TimeUnit.SECONDS);
	}
	
	public static boolean exists(String key) {
		return redisTemplate.hasKey(key);
	}
	
	public static String get(String key) {
		return stringRedisTemplate.boundValueOps(key).get();
	}
	
	@SuppressWarnings("unchecked")
	public static <T> T get(String key, Class<T> clazz) {
		if (clazz.equals(String.class)) {
			return (T) stringRedisTemplate.boundValueOps(key).get();
		} else if (clazz.equals(Integer.class) || clazz.equals(Long.class)) {
			return (T) stringRedisTemplate.boundValueOps(key).get();
		} else if (clazz.equals(Double.class) || clazz.equals(Float.class)) {
			return (T) stringRedisTemplate.boundValueOps(key).get();
		} else if (clazz.equals(Short.class) || clazz.equals(Boolean.class)) {
			return (T) stringRedisTemplate.boundValueOps(key).get();
		}
		return (T) redisTemplate.boundValueOps(key).get();
	}
	
	/**
	 * 递增操作
	 * 
	 * @param key
	 * @param by
	 * @return
	 */
	public static double incr(String key, double by) {
		return stringRedisTemplate.opsForValue().increment(key, by);
	}
	
	/**
	 * 递减操作
	 * 
	 * @param key
	 * @param by
	 * @return
	 */
	public static double decr(String key, double by) {
		return stringRedisTemplate.opsForValue().increment(key, -by);
	}

	/**
	 * 递增操作
	 * 
	 * @param key
	 * @param by
	 * @return
	 */
	public static long incr(String key, long by) {
		return stringRedisTemplate.opsForValue().increment(key, by);
	}

	/**
	 * 递减操作
	 * 
	 * @param key
	 * @param by
	 * @return
	 */
	public static long decr(String key, long by) {
		return stringRedisTemplate.opsForValue().increment(key, -by);
	}

	
}

 

5、测试RedisUtils工具类

package com.huatech;

import java.util.Date;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.huatech.domain.User;
import com.huatech.util.RedisUtils;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisUtilsTest {
	
	
	@Test
	public void testRedis()throws Exception{
		String key = "spring:boot:user";
		User user = new User();
		user.setId(21L);
		user.setCreateTime(new Date());
		user.setUsername("lihua");
		user.setEmail("lihua_java@163.com");
		System.out.println(user);
		RedisUtils.set(key, user, 1);
		System.out.println(RedisUtils.get(key, User.class));
		Thread.sleep(1500L);
		System.out.println(RedisUtils.get(key, User.class));
		
	}
	
}

 

6、其他类

package com.huatech.supports;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
 * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext.
 * 
 * @author lh
 * @date 2017-12-27
 */
@Component
@Lazy(false)
public class SpringContextHolder implements ApplicationContextAware, DisposableBean {

	private static ApplicationContext applicationContext = null;

	private static final Logger LOGGER = LoggerFactory.getLogger(SpringContextHolder.class);

	/**
	 * 取得存储在静态变量中的ApplicationContext.
	 */
	public static ApplicationContext getApplicationContext() {
		assertContextInjected();
		return applicationContext;
	}

	/**
	 * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
	 */
	@SuppressWarnings("unchecked")
	public static <T> T getBean(String name) {
		assertContextInjected();
		return (T) applicationContext.getBean(name);
	}

	/**
	 * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
	 */
	public static <T> T getBean(Class<T> requiredType) {
		assertContextInjected();
		return applicationContext.getBean(requiredType);
	}

	/**
	 * 清除SpringContextHolder中的ApplicationContext为Null.
	 */
	public static void clearHolder() {
		LOGGER.debug("清除SpringContextHolder中的ApplicationContext:{}" , applicationContext);
		applicationContext = null;
	}

	/**
	 * 实现ApplicationContextAware接口, 注入Context到静态变量中.
	 */
	@Override
	public void setApplicationContext(ApplicationContext applicationContext) {
		LOGGER.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext);
		if (SpringContextHolder.applicationContext != null) {
			LOGGER.info("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:{}" , SpringContextHolder.applicationContext);
		}
		SpringContextHolder.applicationContext = applicationContext;
	}

	/**
	 * 实现DisposableBean接口, 在Context关闭时清理静态变量.
	 */
	@Override
	public void destroy() throws Exception {
		SpringContextHolder.clearHolder();
	}

	/**
	 * 检查ApplicationContext不为空.
	 */
	private static void assertContextInjected() {
		if(applicationContext == null) {
			throw new InstantiationError("applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");
		}
		//Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");
	}
}

 

 参考博客:Spring Boot中Redis的使用

分享到:
评论

相关推荐

    springMVC集成spring-data-redis

    在SpringMVC中集成Spring Data Redis,可以利用Redis的高效特性来提升应用程序的数据处理能力,例如作为session共享的存储、缓存数据或者实现发布/订阅(Pub/Sub)功能。发布/订阅是一种通信模式,允许发送者(pub)将...

    spring-data-redis 1.7.6

    9. **Spring Boot集成**:Spring Data Redis与Spring Boot的深度整合,使得配置变得更加简洁,只需要少量的配置就能快速搭建起Redis连接。 10. **源码分析**:`spring-data-redis-1.7.6.RELEASE-sources.jar`包含了...

    spring-boot-redis.zip

    以上就是"spring-boot-redis.zip"压缩包中涉及的关键技术点,通过这些内容,你可以学习到如何在Spring Boot应用中集成和使用Redis,从而提高应用的性能和响应速度。在实际开发中,可以根据项目需求灵活调整和扩展...

    redis-spring-boot-starter.rar

    `redis-spring-boot-starter`是Spring Boot生态中的一个启动器(Starter),它简化了Redis与Spring Boot集成的过程,使得开发者无需手动配置复杂的Redis连接参数,就能快速地在应用中启用Redis服务。这个启动器通常...

    spring-boot-redis mybatis demo

    【标题】"spring-boot-redis mybatis demo" 演示了如何在Spring Boot项目中集成Redis缓存和MyBatis持久层框架。这个项目旨在提供一个基础模板,帮助开发者理解如何有效地利用这两种技术来提升应用程序的性能和响应...

    spring-boot-mybatis-redis.zip

    【标题】"spring-boot-mybatis-redis.zip"是一个基于Spring Boot框架的项目,它整合了MyBatis持久层框架和Redis缓存系统。这个项目旨在提供一个基础的、易用的开发环境,使得开发者能够快速地搭建具备数据访问和缓存...

    spring-boot+redis+mybatis.zip

    《Spring Boot + Redis + MyBatis 整合实践详解》 在现代Java开发中,Spring Boot以其简洁的配置、快速的开发效率以及丰富的生态而备受青睐。本项目案例结合了Spring Boot、Redis缓存和MyBatis持久层框架,旨在提供...

    spring-data-redis.jar

    7. **Spring Boot集成**:在Spring Boot应用中,Spring Data Redis可以通过自动配置轻松地启用,只需要在pom.xml或build.gradle中添加依赖,并在application.properties或application.yml中设置相关配置。...

    spring-boot2集成redis

    **Spring Boot 2 集成 Redis 知识点详解** Spring Boot 2 提供了对 Redis 的便捷集成,使得开发者能够快速地在 Spring 应用中利用 Redis 的高性能存储特性。以下将详细介绍如何在 Spring Boot 2 项目中集成 Redis,...

    springboot-mybatis-redis缓存集成

    MyBatis与Spring Boot集成时,通常会使用`spring-boot-starter-data-jpa`或`spring-boot-starter-mybatis`启动器。 接下来,我们讨论Redis。Redis是一个内存数据结构存储系统,常被用作数据库、缓存和消息中间件。...

    spring-boot-sample-Redis.zip_ownerrn7_springboot Demo

    标题 "spring-boot-sample-Redis.zip_ownerrn7_springboot Demo" 暗示这是一个关于Spring Boot集成Redis的示例项目。在这个项目中,开发者可能已经实现了一个使用Spring Boot框架和Redis缓存数据库的简单应用。...

    spring-data-redis最新架包

    这个最新的框架版本——"spring-data-redis-2.0.7-RELEASE",旨在提升开发效率,使得在Spring应用程序中集成Redis变得更加便捷。 Spring Data Redis的核心目标是简化Redis操作,提供一套统一的API,覆盖了Redis的...

    spring-boot-整合redis

    要在 Spring Boot 项目中集成 Redis,首先需要在构建文件(如 `pom.xml` 或 `build.gradle`)中添加 `spring-boot-starter-data-redis` 依赖。这个依赖包含了所有必需的组件,包括客户端驱动程序。 ```xml &lt;!-- ...

    spring-data-redis

    Spring Data Redis能很好地与其他Spring框架集成,如Spring Cache可以利用Redis作为缓存后端,Spring Session可以使用Redis存储用户的会话信息,Spring Cloud Data Flow可以利用Redis作为任务调度的存储。...

    springboot2.0.x+dubbo-spring-boot-starter

    标题 "springboot2.0.x+dubbo-spring-boot-starter" 涉及的是将流行的微服务框架 Dubbo 集成到 Spring Boot 2.0.x 的项目实践中。这个集成使得开发者能够利用 Spring Boot 的便利性和 Dubbo 的高性能远程服务调用...

    spring-boot-demo-cluster-redis-websocket.zip

    本项目"spring-boot-demo-cluster-redis-websocket.zip"就是这样一个示例,它演示了如何在Spring Boot应用中利用WebSocket进行实时通信,并通过Redis实现消息的集群共享。 首先,让我们了解一下Spring Boot。Spring...

Global site tag (gtag.js) - Google Analytics