黑发不知勤学早,白首方悔读书迟
网上好多RedisUtil工具类,这里给大家展示用接口来实现,我们可以注入后直接调用:
注:
里面的方法并不全面,有没涉及到的方法可以进入到RedisTemplate看源码中的方法,然后写到接口中实现一下就可以使用。
例子:
private RedisService redisService;
public void redisTest(@RequestBody User user) {
User user1 = new User("loveLetter", 18, "测试");
boolean set = redisService.set(user.getId(), user1);
System.out.println("Redis set key:" + set);
System.out.println("Redis get key:"+redisService.get(user.getId()));
}
控制台输出:
1、在pom里引入Maven依赖
2、配置RedisConfigorg.springframework.boot spring-boot-starter-data-redis
package com.loveletter.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypevalidator;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate redisTemplate = new StringRedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.activateDefaultTyping(LaissezFaireSubTypevalidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
3、新建RedisService
package com.loveletter.redis;
import java.util.List;
import java.util.Map;
public interface RedisService {
public void remove(final String... keys);
public void removePattern(final String pattern);
public void remove(final String key);
public boolean exists(final String key);
public void refreshExpireTime(final String key, Integer expireTime);
public Object get(final String key);
public boolean set(final String key, Object value);
public boolean set(final String key, Object value, Integer expireTime);
boolean setList(String key, List list);
boolean setList(String key, List list, Integer expireTime);
boolean lSet(String key, Object value);
boolean lSet(String key, Object value, Integer expireTime);
boolean rSet(String key, Object value);
boolean rSet(String key, Object value, Integer expireTime);
List getList(String key);
public boolean setMap(K key, Map map, Integer expireTime);
public Map getMap(final K key);
Integer incr(String key);
}
4、新建RedisServiceImpl
package com.loveletter.redis;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Service
public class RedisServiceImpl implements RedisService {
@Autowired
private RedisTemplate redisTemplate;
private static final Integer MINUTES_OF_ONE_DAY = 24 * 60;
//private static ObjectMapper objectMapper = new ObjectMapper();
@Override
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
}
@Override
public void removePattern(final String pattern) {
Set keys = redisTemplate.keys(pattern);
if (keys.size() > 0) {
redisTemplate.delete(keys);
}
}
@Override
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
}
@Override
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
}
@Override
public void refreshExpireTime(final String key, Integer expireTime) {
if (exists(key)) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
}
@Override
public Object get(final String key) {
Object result = null;
ValueOperations operations = redisTemplate.opsForValue();
result = operations.get(key);
return result;
}
@Override
public boolean set(final String key, Object value) {
boolean result = false;
try {
ValueOperations operations = redisTemplate.opsForValue();
operations.set(key, value);
redisTemplate.expire(key, MINUTES_OF_ONE_DAY, TimeUnit.MINUTES);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public boolean set(final String key, Object value, Integer expireTime) {
boolean result = false;
try {
ValueOperations operations = redisTemplate.opsForValue();
operations.set(key, value);
if (expireTime != null) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public boolean setList(String key, List list) {
return setList(key, list, MINUTES_OF_ONE_DAY * 60);
}
@Override
public boolean setList(String key, List list, Integer expireTime) {
return set(key, list, expireTime);
}
@Override
public boolean lSet(String key, Object value) {
return lSet(key, value, 0);
}
@Override
public boolean lSet(String key, Object value, Integer expireTime) {
try {
redisTemplate.opsForList().leftPush(key, value);
if (expireTime > 0) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
public boolean rSet(String key, Object value) {
return lSet(key, value, 0);
}
@Override
public boolean rSet(String key, Object value, Integer expireTime) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (expireTime > 0) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@Override
public List getList(String key) {
Object jsonStr = get(key);
if (jsonStr == null) {
return null;
}
try {
return (List) jsonStr;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
public boolean setMap(K key, Map map, Integer expireTime) {
HashOperations operations = redisTemplate.opsForHash();
operations.putAll(key, map);
if (expireTime != null) {
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
}
return false;
}
@Override
public Map getMap(final K key) {
HashOperations operations = redisTemplate.opsForHash();
return operations.entries(key);
}
@Override
public Integer incr(String key) {
ValueOperations ops = redisTemplate.opsForValue();
try {
//此方法会先检查key是否存在,存在+1,不存在先初始化,再+1
ops.increment(key, 1);
return (int) get(key);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return 0;
}
}



