一、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支持的数据类型很少
* */
@Bean
public 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 {
@Autowired
RedisTemplate 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
的不同操作接口来处理不同类型的数据。这些代码示例提供了基本的操作方法,包括设置值、获取值、添加元素等。在实际应用中,你可能需要根据具体需求进行调整和扩展。