SpringBoot 集成Redis
集成示例
SpringBoot版本 : 2.4.3
1. 依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>provided</scope>
</dependency>
<!-- redis 配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
<!-- lettuce pool 缓存连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.71</version>
</dependency>
<!-- redis 配置 end-->
2. yml配置
server:
port: 8080
spring:
redis:
host: localhost
port: 6379
password:
timeout: 5000
lettuce:
pool:
max-idle: 10
max-active: 100
max-wait: 100000
3. redis配置
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
//使用fastjson序列化
FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
// value值的序列化采用fastJsonRedisSerializer
template.setValueSerializer(fastJsonRedisSerializer);
template.setHashValueSerializer(fastJsonRedisSerializer);
// key的序列化采用StringRedisSerializer
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
4. redis工具类
/**
* redis工具类
*/
@Component
public class RedisUtils {
@Resource
private RedisTemplate<String, Object> redisTemplate;
/**
* 删除key
*
* @param key
*/
public void delete(String key) {
redisTemplate.delete(key);
}
/**
* 批量删除key
*
* @param keys
*/
public void delete(List<String> keys) {
redisTemplate.delete(keys);
}
/**
* 是否存在key
*
* @param key
*/
public Boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
/**
* 设置过期时间
*
* @param key redis键
* @param timeout 过期时间
* @return
*/
public boolean expire(final String key, final long timeout) {
return expire(key, timeout, TimeUnit.SECONDS);
}
/**
* 设置过期时间
*
* @param key redis键
* @param timeout 过期时间
* @param unit 时间单位
* @return
*/
public boolean expire(final String key, final long timeout, final TimeUnit unit) {
Boolean expire = redisTemplate.expire(key, timeout, unit);
return expire != null && expire;
}
/**
* 设置指定key的值
*
* @param key redis键
* @param value 值
*/
public void set(final String key, final Object value) {
redisTemplate.opsForValue().set(key, value, 1, TimeUnit.SECONDS);
}
/**
* 设置过期时间对象
*
* @param key redis键
* @param value 值
* @param timeout 过期时间
*/
public void set(final String key, final Object value, final long timeout) {
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
}
/**
* 只有在 key 不存在时设置 key 的值
*
* @param key 键
* @param value 值
* @return 之前已经存在返回 false, 不存在返回 true
*/
public Boolean setIfAbsent(final String key, final Object value, final long timeout) {
return redisTemplate.opsForValue().setIfAbsent(key, value, timeout, TimeUnit.SECONDS);
}
/**
* 获取对象
*
* @param key redis键
* @return
*/
public Object get(final String key) {
return redisTemplate.opsForValue().get(key);
}
/**
* 增加(自增长), 负数则为自减
*
* @param key 键
* @param increment 自增量
* @return 增加后的值
*/
public Long incrementBy(String key, long increment) {
return redisTemplate.opsForValue().increment(key, increment);
}
/**
* hash中存入数据
*
* @param key redis键
* @param hKey hash键
* @param value 值
*/
public void hput(final String key, final String hKey, final Object value) {
redisTemplate.opsForHash().put(key, hKey, value);
}
/**
* 获取存储在hash中指定字段的值
*
* @param key 键
* @param hKey 字段名( 即 map 中的 key )
* @return 值
*/
public Object hGet(final String key, final String hKey) {
return redisTemplate.opsForHash().get(key, hKey);
}
/**
* 获取给定hash中的所有键值对
*
* @param key 哈希表
* @return 所有的 键值对
*/
public Map<Object, Object> hGetAll(String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* set 添加元素
*
* @param key 集合
* @param values 值, 可以同时添加多个
* @return 集合长度
*/
public Long sAdd(String key, Object... values) {
return redisTemplate.opsForSet().add(key, values);
}
/**
* 往Set中存入数据
*
* @param key Redis键
* @param values 值
* @return 存入的个数
*/
public long sSet(final String key, final Object... values) {
Long count = redisTemplate.opsForSet().add(key, values);
return count == null ? 0 : count;
}
}
5. 单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisDemoApplicationTests {
@Autowired
private RedisUtils redisUtils;
@Test
public void redsitTest() {
redisUtils.set("test",1);
System.out.println("redisValue:"+redisUtils.get("test"));
}
}
6. 运行结果
7. 源码
https://download.csdn.net/download/javanbme/15713615