pom.xml
<!-- redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis连接池依赖-->
<!-- 连接池依赖(必须加,否则运行报错) -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
data:
# redis配置
redis:
host: 127.0.0.1
port: 6379
password: # 没有密码就空着
database: 0
timeout: 10s
lettuce:
pool:
# 最大连接数
max-active: 200
max-wait: -1ms
# 连接池最大空闲连接
max-idle: 10
min-idle: 0
package com.example.demo.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Value("${spring.data.redis.host}")
private String redisHost;
@Value("${spring.data.redis.port}")
private int redisPort;
public RedisConnectionFactory redisConnectionFactory(){
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(redisHost, redisPort);
return new LettuceConnectionFactory(config);
}
@SuppressWarnings("renoval")
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
//设置key和hash key使用字符串序列化
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
//设置 jackson2JsonRedisSerializer 作为value序列化方式
RedisSerializer<Object> jsonSer = RedisSerializer.json();
template.setValueSerializer(jsonSer);
template.setHashValueSerializer(jsonSer);
template.afterPropertiesSet();
return template;
}
}
/util/RedisUtil.java 工具类
package com.example.demo.util;
import jakarta.annotation.Resource;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
@Resource
private RedisTemplate<String, Object> redisTemplate;
// ==================== 1. key 相关 ====================
/**
* 设置过期时间
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 获取过期时间
*/
public long getExpire(String key) {
return redisTemplate.getExpire(key, TimeUnit.SECONDS);
}
/**
* 判断key是否存在
*/
public boolean hasKey(String key) {
try {
return Boolean.TRUE.equals(redisTemplate.hasKey(key));
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public void del(String... keys){
if (keys != null && keys.length > 0){
if (keys.length == 1) redisTemplate.delete(keys[0]);
else redisTemplate.delete(CollectionUtils.arrayToList(keys).toString());
}
}
/**
* 删除key
*/
public void delete(String key) {
redisTemplate.delete(key);
}
// ==================== 2. String 类型 ====================
/**
* 存值
*/
public boolean set(String key, Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 存值并设置过期时间(秒)
*/
public boolean set(String key, Object value, long time) {
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 取值
*/
public Object get(String key) {
return key == null ? null : redisTemplate.opsForValue().get(key);
}
/**
* 自增
*/
public long increment(String key, long delta) {
return redisTemplate.opsForValue().increment(key, delta);
}
// ==================== 3. Hash 类型 ====================
public Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}
public boolean hset(String key, String item, Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
// ==================== 4. List / Set 简易封装 ====================
public long lSet(String key, Object value) {
return redisTemplate.opsForList().rightPush(key, value);
}
public List<Object> lGet(String key, long start, long end) {
return redisTemplate.opsForList().range(key, start, end);
}
public Set<Object> sGet(String key) {
return redisTemplate.opsForSet().members(key);
}
}