一、Java Boot 使用中间件 Redis 标准化流程
注:写本文章的原因是项目中的redis使用不规范导致断开连接,重新连接也不行,稳定性不够
配置
1.在pom.xml添加
<!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
2.在application.properties配置
#redis
#地址
spring.data.redis.host=127.0.0.1
#端口
spring.data.redis.port=6379
#使用库
spring.data.redis.database=2
# 设置默认过期时间为30秒(30000毫秒)
spring.cache.redis.time-to-live=30000
注:代码也可以设置过期时间
案例 :保存 string 设置30S过期 redisTemplate.opsForValue().set(“text”, “value”,30, TimeUnit.SECONDS);
3.创建一个Java文件,用于初始化
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.serializer.RedisSerializer;@Configuration
public class RedisConfiguration {/** 将数据序列化* 因为redis支持的数据类型很少* */@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){// 将template 泛型设置为 <String, Object>RedisTemplate<String, Object> template = new RedisTemplate();// 连接工厂,不必修改template.setConnectionFactory(redisConnectionFactory);/** 序列化设置*/// key、hash的key 采用 String序列化方式template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());// value、hash的value 采用 Jackson 序列化方式template.setValueSerializer(RedisSerializer.json());template.setHashValueSerializer(RedisSerializer.json());template.afterPropertiesSet();return template;}}
配置结束
使用方法
代码案例 — 是我测试的一个接口Java类,测试性能和使用方法
package com.example.apidemo.login;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.TimeUnit;@RestController
@RequestMapping("/txt")
public class TxtController {@AutowiredRedisTemplate redisTemplate;public TxtController(RedisTemplate redisTemplate) {this.redisTemplate = redisTemplate;}@RequestMapping("/inder3")public String getInder3() {for (int i = 0; i < 100000; i++) {//失效时间redisTemplate.opsForValue().set("" + i, i,30, TimeUnit.SECONDS);}return "001";}@RequestMapping("/inder4")public String getInder4() {//取出打印for (int i = 0; i < 50000; i++) {System.out.println( redisTemplate.opsForValue().get("" + i));}return "001";}
}
二 、其他案例–其他方法使用案例
提供的方法有很多可以存取不同类型的数据类型
redisTemplate.opsForList() List列表类型
redisTemplate.opsForSet() Set集合类型
redisTemplate.opsForZSet() Zet有序集合类型
redisTemplate.opsForHash() Hash哈希类型
以下是使用RedisTemplate
操作不同Redis数据类型的代码示例:
1. 字符串(String)
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;@Component
public class RedisStringOperations {private final RedisTemplate<String, String> redisTemplate;public RedisStringOperations(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void setString(String key, String value) {redisTemplate.opsForValue().set(key, value);}public String getString(String key) {return redisTemplate.opsForValue().get(key);}public void setStringWithExpire(String key, String value, long timeout, TimeUnit unit) {redisTemplate.opsForValue().set(key, value, timeout, unit);}
}
2. 列表(List)
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.List;@Component
public class RedisListOperations {private final RedisTemplate<String, String> redisTemplate;public RedisListOperations(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void leftPush(String key, String value) {redisTemplate.opsForList().leftPush(key, value);}public void rightPush(String key, String value) {redisTemplate.opsForList().rightPush(key, value);}public List<String> getList(String key) {return redisTemplate.opsForList().range(key, 0, -1);}
}
3. 集合(Set)
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Set;@Component
public class RedisSetOperations {private final RedisTemplate<String, String> redisTemplate;public RedisSetOperations(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void add(String key, String value) {redisTemplate.opsForSet().add(key, value);}public Set<String> getSet(String key) {return redisTemplate.opsForSet().members(key);}
}
4. 有序集合(ZSet)
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Set;@Component
public class RedisZSetOperations {private final RedisTemplate<String, String> redisTemplate;public RedisZSetOperations(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}public void add(String key, String value, double score) {redisTemplate.opsForZSet().add(key, value, score);}public Set<String> getZSetRange(String key) {return redisTemplate.opsForZSet().range(key, 0, -1);}
}
5. 哈希(Hash)
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Map;@Component
public class RedisHashOperations {private final RedisTemplate<String, Object> redisTemplate;public RedisHashOperations(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}public void putHash(String key, String hashKey, Object value) {redisTemplate.opsForHash().put(key, hashKey, value);}public Map<Object, Object> getHash(String key) {return redisTemplate.opsForHash().entries(key);}
}
在上述代码中,我们使用了RedisTemplate
的不同操作接口来处理不同类型的数据。这些代码示例提供了基本的操作方法,包括设置值、获取值、添加元素等。在实际应用中,你可能需要根据具体需求进行调整和扩展。