现在整理下,springboot集成redis的流程
1,添加依赖包
<!-- jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
<!-- redis格式化用 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- redis依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2,添加yml配置文件
spring:
redis:
host: localhost
port: 6379
password:
timeout: 5000ms
jedis:
pool:
max-active: 8
max-idle: 20
max-wait: -1ms
min-idle: 5
database: 0
3,添加redisconfig类
有两种序列化方式,第一种是明文,第二种是二进制
明文:
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
//设置value的序列化规则和 key的序列化规则
RedisSerializer stringSerializer = new StringRedisSerializer(Charset.forName("UTF8"));
redisTemplate.setKeySerializer(stringSerializer );
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(stringSerializer );
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
二进制:
@Bean
@ConditionalOnClass(name = "org.springframework.data.redis.connection.RedisConnectionFactory")
public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
JdkSerializationRedisSerializer serializationRedisSerializer = new JdkSerializationRedisSerializer();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(serializationRedisSerializer);
redisTemplate.setValueSerializer(serializationRedisSerializer);
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
4,添加redisUtils类
package com.cloud.parent.cloudredisserver.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* redis 工具类
*/
@Component
public class RedisUtils {
@Autowired
private RedisTemplate redisTemplate;
@Resource(name = "redisTemplate")
private ValueOperations<String,String> valueOperations;
/** 默认过期时长,单位:默认一天 */
public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
/** 不设置过期时长 */
public final static long NOT_EXPIRE = -1;
public void set(String key, String value, long expire) {
valueOperations.set(key, value);
if (expire != NOT_EXPIRE) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
}
public String get(String key, long expire) {
String value = valueOperations.get(key);
if (expire != NOT_EXPIRE) {
redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
return value;
}
public String get(String key) {
return get(key, NOT_EXPIRE);
}
public void set(String key, String value) {
set(key, value, DEFAULT_EXPIRE);
}
/**
* 设置缓存失效时间
* @param key
* @param time
* @return
*/
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;
}
}
/**
* 根据key获取过期时间
* @param key
* @return
*/
/*public long getExpire(String key){
return redisTemplate.getExpire(key,TimeUnit.SECONDS);
}*/
/**
* 判断key是否存在
* @param key
* @return
*/
public boolean hasKey(String key){
try{
return redisTemplate.hasKey(key);
}catch (Exception ex){
ex.printStackTrace();
return false;
}
}
/**
* 删除缓存
* @param key
*/
public void del(String ...key){
if(key != null && key.length > 0){
if(key.length == 1){
redisTemplate.delete(key[0]);
}else{
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
}
/**
* 根据key得到value
* @param key
* @return
*/
/*public Object get(String key){
return key == null ? null : redisTemplate.opsForValue().get(key);
}*/
/**
* 把key和value存入内存
* @param key
* @param value
* @return
*/
/*public boolean set(String key,String value){
try{
redisTemplate.opsForValue().set(key,value);
return false;
}catch (Exception e){
e.printStackTrace();
return false;
}
}*/
/**
* 设置缓存并设置过期时间
* @param key
* @param value
* @param time
* @return
*/
/*public boolean set(String key,Object value,long time){
try {
redisTemplate.opsForValue().set(key,value,time);
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}*/
/**
* 递增
* @param key
* @param delta
* @return
*/
public long incr(String key,long delta){
if(delta < 0){
throw new RuntimeException("The increment must be greater than 0");
}
return redisTemplate.opsForValue().increment(key,delta);
}
/**
* 递减
* @param key
* @param delta
* @return
*/
public long decr(String key,long delta){
if(delta < 0){
throw new RuntimeException("The decrement must be greater than 0");
}
return redisTemplate.opsForValue().decrement(key,delta);
}
/**
* hash get
* @param key
* @param item
* @return
*/
public Object hashGet(String key,String item){
return redisTemplate.opsForHash().get(key,item);
}
public boolean hasSet(String key, Map<String, Object> map){
try {
redisTemplate.opsForHash().putAll(key,map);
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
}