redis的使用(四)spring boot 整合redis(Jedis客户端)

本次记录spring boot 整合redis的配置

1. 引入redis和jedis依赖包

    <!-- redis依赖和jedis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

2. 环境配置

applicaltion.yml

# redis配置
redis:
  host: XX.XX.XX.XX
  port: XXXX
  database: 0 #数据库索引
  timeout: 60000 #连接超时
  password: XXXXXXX #口令
  pool: 
    maxActive: 300 #最大连接数
    maxWait: -1 #最大等待时间
    maxIdle: 30
    minIdle: 10
    testOnBorrow: true #连接时检查
    testWhileIdle: true #空闲时检查

3. config配置

import java.time.Duration;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;

import redis.clients.jedis.JedisPoolConfig;

/**
 * @Title: redis配置
 * @Description:
 * @author zch
 * @date 2019年6月26日 下午2:50:28
 */
@Configuration
@EnableCaching
@EnableAutoConfiguration
public class RedisConfiguration
{
    // redis地址ip 
	@Value("${redis.host}")
	private String host;
    // 端口
	@Value("${redis.port}")
	private int port;
	// redis口令
	@Value("${redis.password}")
	private String password;
	// 索引
	@Value("${redis.database}")
	private int database;
	// 连接超时
	@Value("${redis.timeout}")
	private int timeout;
	// 最大 连接数
	@Value("${redis.pool.maxActive}")
	private int maxActive;
	// 最大等待时间
	@Value("${redis.pool.maxWait}")
	private long maxWait;
	// 最大空闲连接数
	@Value("${redis.pool.maxIdle}")
	private int maxIdle;
	// 最小空闲连接数
	@Value("${redis.pool.minIdle}")
	private int minIdle;
    // 连接时测试
	@Value("${redis.pool.testOnBorrow}")
	private boolean testOnBorrow;
    // 空闲时测试
	@Value("${redis.pool.testWhileIdle}")
	private boolean testWhileIdle;

	/**
	 * @Title: 连接池
	 * @Description:
	 * @author zch
	 * @date 2019年6月26日 下午3:22:40
	 */
	@Bean
	public JedisPoolConfig jedisPoolConfig()
	{
		JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
		jedisPoolConfig.setMaxIdle(maxIdle);
		jedisPoolConfig.setMaxTotal(maxActive);
		jedisPoolConfig.setMaxWaitMillis(maxWait);
		jedisPoolConfig.setMinIdle(minIdle);
		jedisPoolConfig.setTestOnBorrow(testOnBorrow);
		jedisPoolConfig.setTestWhileIdle(testWhileIdle);
		return jedisPoolConfig;
	}

	/**
	 * @Title: 连接工厂
	 * @Description:
	 * @author zch
	 * @date 2019年6月26日 下午2:51:38
	 */
	@SuppressWarnings("deprecation")
	@Bean
	public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig)
	{
		JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfigurationBuilder = JedisClientConfiguration
				.builder();
		jedisClientConfigurationBuilder.readTimeout(Duration.ofMillis(timeout));// 读取超时单位毫秒
		JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
		jedisConnectionFactory.setDatabase(database);
		jedisConnectionFactory.setHostName(host);
		jedisConnectionFactory.setPassword(password);
		jedisConnectionFactory.setPort(port);
		jedisConnectionFactory.setPoolConfig(jedisPoolConfig);

		return jedisConnectionFactory;
	}

	/**
	 * @Title: 对象操作
	 * @Description: 操作对象类型数据
	 * @author zch
	 * @date 2019年6月26日 下午2:51:55
	 */
	@Bean
	public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory)
	{
		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
		RedisSerializer<String> redisSerializer = new StringRedisSerializer();
		Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
				Object.class);
		ObjectMapper om = new ObjectMapper();
		om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jackson2JsonRedisSerializer.setObjectMapper(om);
		template.setConnectionFactory(jedisConnectionFactory);
		// key序列化方式
		template.setKeySerializer(redisSerializer);
		// value序列化
		template.setValueSerializer(jackson2JsonRedisSerializer);
		// value hashmap序列化
		template.setHashValueSerializer(jackson2JsonRedisSerializer);
		// 自行百度查找更完善的序列化设置
        return template;

	}

	/**
	 * @Title: 字符串操作
	 * @Description: 操作字符串类型数据
	 * @author zch
	 * @date 2019年6月26日 下午2:52:09
	 */
	@Bean
	public StringRedisTemplate stringRedisTemplate(JedisConnectionFactory jedisConnectionFactory)
	{
		StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
		stringRedisTemplate.setConnectionFactory(jedisConnectionFactory);
		return stringRedisTemplate;
	}

}

4. 使用RedisTemplate和StringRedisTemplate进行操作

注入使用

RedisTemplate对5种数据结构的操作
redisTemplate.opsForValue();  //操作字符串
redisTemplate.opsForHash();   //操作hash
redisTemplate.opsForList();   //操作list
redisTemplate.opsForSet();    //操作set
redisTemplate.opsForZSet();   //操作有序set

stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间  
stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作
stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val
stringRedisTemplate.boundValueOps("test").increment(1);//val +1
stringRedisTemplate.getExpire("test")//根据key获取过期时间
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过期时间并换算成指定单位 
stringRedisTemplate.delete("test");//根据key删除缓存
stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值 
stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合
stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//设置过期时间
stringRedisTemplate.opsForSet().isMember("red_123", "1")//根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().members("red_123");//根据key获取set集合

补充:

应业务场景要求,配置多数据库的redis

使用@Bean( name = "xxxx")区分多个RedisTemplate

    @Bean(name = "xxxxRedisTemplate")
	public RedisTemplate<String, Object> dataRedisTemplate(JedisPoolConfig jedisPoolConfig)
	{
		JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
		jedisConnectionFactory.setDatabase(database);
		jedisConnectionFactory.setHostName(host);
		jedisConnectionFactory.setPassword(password);
		jedisConnectionFactory.setPort(port);
		jedisConnectionFactory.setTimeout(timeout);
		jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
		RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
		RedisSerializer<String> redisSerializer = new StringRedisSerializer();
		Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
				Object.class);
		ObjectMapper om = new ObjectMapper();
		om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jackson2JsonRedisSerializer.setObjectMapper(om);
		template.setConnectionFactory(jedisConnectionFactory);
		// key序列化方式
		template.setKeySerializer(redisSerializer);
		// value序列化
		template.setValueSerializer(jackson2JsonRedisSerializer);
		// value hashmap序列化
		template.setHashValueSerializer(jackson2JsonRedisSerializer);
		return template;

	}

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,关于springboot整合redis的问题,我可以回答。SpringBoot是一种基于Spring框架的快速开发框架,可以快速集成各种组件,其中包括Redis。要整合Redis,需要在SpringBoot项目的pom.xml文件中添加Redis的依赖,同时在配置文件中添加Redis的配置信息。具体的步骤可以参考SpringBoot官方文档或者一些在线教程。 ### 回答2: Spring Boot整合Redis可以通过以下步骤实现: 1. 首先,在pom.xml文件中添加Redis相关的依赖项。可以使用Spring Data Redis依赖(spring-boot-starter-data-redis)和Jedis依赖(jedis)。 2. 创建Redis的配置文件,可以在application.properties或application.yml中配置Redis的主机名、端口号、密码等信息。 3. 创建一个配置类,用于配置Redis连接工厂和Redis模板。可以通过使用`@Configuration`注解和`redisConnectionFactory()`方法来配置Redis连接工厂,通过使用`@Bean`注解和`redisTemplate()`方法来配置Redis模板。 4. 创建一个服务类,用于实现对Redis的操作。可以使用Spring Data Redis提供的RedisTemplate类来实现常见的操作,如存储数据、获取数据、删除数据等。 5. 在需要使用Redis的地方,可以通过依赖注入的方式来使用Redis服务。 以下是一个简单的示例代码: 1. pom.xml文件中添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> ``` 2. application.properties中配置Redis信息: ``` spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= ``` 3. 创建Redis的配置类: ```java @Configuration public class RedisConfig { @Bean JedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(); redisStandaloneConfiguration.setHostName("127.0.0.1"); redisStandaloneConfiguration.setPort(6379); return new JedisConnectionFactory(redisStandaloneConfiguration); } @Bean public RedisTemplate<String, Object> redisTemplate() { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory()); return template; } } ``` 4. 创建Redis的服务类: ```java @Service public class RedisService { @Autowired private RedisTemplate<String, Object> redisTemplate; public void setValue(String key, Object value) { redisTemplate.opsForValue().set(key, value); } public Object getValue(String key) { return redisTemplate.opsForValue().get(key); } public void deleteValue(String key) { redisTemplate.delete(key); } } ``` 5. 在需要使用Redis的地方,可以通过依赖注入RedisService来使用Redis服务: ```java @RestController public class ExampleController { @Autowired private RedisService redisService; @GetMapping("/example") public String example() { redisService.setValue("name", "John"); String name = (String) redisService.getValue("name"); redisService.deleteValue("name"); return name; } } ``` 通过以上步骤,就可以在Spring Boot应用中使用Redis进行数据存储、获取和删除等操作了。 ### 回答3: Spring Boot是一个用于创建和构建Spring应用程序的开源框架。它简化了Spring应用程序的开发过程,并提供了各种开箱即用的功能和集成。Redis是一个流行的用于缓存和存储数据的内存数据库。下面是如何在Spring Boot应用程序中整合Redis的步骤: 1. 添加依赖:在项目的pom.xml文件中添加Redis的依赖项。可以使用Spring Boot提供的spring-boot-starter-data-redis依赖项。在构建工具Maven中,可以通过以下方式添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> ``` 2. 配置Redis连接:在Spring Boot的配置文件中,配置Redis的连接信息,包括主机名、端口号、密码等。可以使用如下配置示例: ```properties spring.redis.host=localhost spring.redis.port=6379 spring.redis.password= ``` 3. 创建RedisTemplate bean:在Spring Boot的配置类中,创建RedisTemplate的bean。RedisTemplate是Spring提供的用于与Redis进行交互的工具类。可以使用如下方式创建bean: ```java @Configuration public class RedisConfig { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.password}") private String password; @Bean public RedisConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, port); config.setPassword(RedisPassword.of(password)); return new LettuceConnectionFactory(config); } @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); return redisTemplate; } } ``` 4. 使用RedisTemplate:在需要使用Redis的地方,注入RedisTemplate并使用其提供的方法来操作Redis。例如,可以在服务类中使用RedisTemplate进行数据的读取和写入操作: ```java @Service public class UserService { @Autowired private RedisTemplate<String, Object> redisTemplate; public User getUserById(String userId) { String key = "user:" + userId; return (User) redisTemplate.opsForValue().get(key); } public void saveUser(User user) { String key = "user:" + user.getId(); redisTemplate.opsForValue().set(key, user); } } ``` 通过以上步骤,就可以在Spring Boot应用程序中成功地整合Redis,并通过RedisTemplate进行数据的读写操作。这样可以更加方便地利用Redis的优势来提升应用程序的性能和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值