
org.springframework.boot spring-boot-starter-data-redis2.0.0.RELEASE lettuce-core io.lettuce redis.clients jedis2.10.0
# Redis数据库索引() spring.redis.database=* # Redis服务器地址 spring.redis.host=*** # Redis服务器连接密码(默认为空) spring.redis.password=*** # Redis服务器连接端口 spring.redis.port=*** # 连接超时时间(毫秒) spring.redis.timeout=0 # 连接池最大连接数(使用负值表示没有限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0
package com.util;
import lombok.Getter;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
import org.springframework.stereotype.Component;
import redis.clients.jedis.Jedis;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
@Component
public class RedisUtil {
//region 设置注入的redis对象
// public RedisUtil(RedisTemplate template) {
// stringRedisTemplate=template;
// }
@Getter
private StringRedisTemplate stringRedisTemplate;
@Resource(name = "defaultRedisTemplate")
private StringRedisTemplate defaultRedisTemplate;
@Resource(name = "cacheRedisTemplate")
private StringRedisTemplate cacheRedisTemplate;
@Resource(name ="defaultRedisFactory" )
private JedisConnectionFactory jedisConnectionFactory;
private static RedisUtil redisUtil;
@PostConstruct
public void init() {
redisUtil = this;
redisUtil.defaultRedisTemplate= this.defaultRedisTemplate;
redisUtil.cacheRedisTemplate= this.cacheRedisTemplate;
redisUtil.stringRedisTemplate = this.defaultRedisTemplate;
}
public void setDefaultRedisTemplate(){
this.stringRedisTemplate=defaultRedisTemplate;
}
public void setCacheRedisTemplate(){
this.stringRedisTemplate=cacheRedisTemplate;
}
//endregion
//region redis实例重启
public void validateObject(final Object obj) {
boolean closed = stringRedisTemplate.getConnectionFactory().getConnection().isClosed();
if (closed) {
// Jedis jedis = stringRedisTemplate.getConnectionFactory().getConnection().getNativeConnection();
RedisConnection jedisConnection = jedisConnectionFactory.getConnection();
Jedis jedis = (Jedis)jedisConnection.getNativeConnection();
}
}
//endregion
//region key相关 *** 作
public Boolean delete(String key) {
stringRedisTemplate.delete(key);
return true;
}
public Boolean delete(Collection keys) {
stringRedisTemplate.delete(keys);
return true;
}
public byte[] dump(String key) {
return stringRedisTemplate.dump(key);
}
public Boolean hasKey(String key) {
return stringRedisTemplate.hasKey(key);
}
public Boolean expire(String key, long timeout, TimeUnit unit) {
return stringRedisTemplate.expire(key, timeout, unit);
}
public Boolean expireAt(String key, Date date) {
return stringRedisTemplate.expireAt(key, date);
}
public Set keys(String pattern) {
return stringRedisTemplate.keys(pattern);
}
public Set scan(String pattern){
HashSet set = new HashSet<>();
RedisConnection connection = stringRedisTemplate.getConnectionFactory().getConnection();
Cursor c = connection.scan(new ScanOptions.ScanOptionsBuilder().match(pattern).build());
while (c.hasNext()) {
set.add(new String(c.next()));
}
return set;
}
public Boolean move(String key, int dbIndex) {
return stringRedisTemplate.move(key, dbIndex);
}
public Boolean persist(String key) {
return stringRedisTemplate.persist(key);
}
public Long getExpire(String key, TimeUnit unit) {
return stringRedisTemplate.getExpire(key, unit);
}
public Long getExpire(String key) {
return stringRedisTemplate.getExpire(key);
}
public String randomKey() {
return stringRedisTemplate.randomKey();
}
public void rename(String oldKey, String newKey) {
stringRedisTemplate.rename(oldKey, newKey);
}
public Boolean renameIfAbsent(String oldKey, String newKey) {
return stringRedisTemplate.renameIfAbsent(oldKey, newKey);
}
public DataType type(String key) {
return stringRedisTemplate.type(key);
}
//endregion
//region string相关 *** 作
public void setByDays( String key , String value , long howManyDays ){
stringRedisTemplate.opsForValue().set(key, value, howManyDays, TimeUnit.DAYS);
}
public void setBySeconds( String key , String value , long howManySeconds ){
stringRedisTemplate.opsForValue().set(key, value, howManySeconds, TimeUnit.SECONDS);
}
public void set(String key, String value) {
stringRedisTemplate.opsForValue().set(key, value);
}
public String get(String key) {
String val = stringRedisTemplate.opsForValue().get(key);
if (val == null) {
return null;
} else {
return stringRedisTemplate.opsForValue().get(key).toString();
}
}
public String getRange(String key, long start, long end) {
return stringRedisTemplate.opsForValue().get(key, start, end);
}
public String getAndSet(String key, String value) {
return stringRedisTemplate.opsForValue().getAndSet(key, value).toString();
}
public Boolean getBit(String key, long offset) {
return stringRedisTemplate.opsForValue().getBit(key, offset);
}
public List multiGet(Collection keys) {
return stringRedisTemplate.opsForValue().multiGet(keys);
}
public boolean setBit(String key, long offset, boolean value) {
return stringRedisTemplate.opsForValue().setBit(key, offset, value);
}
public void setEx(String key, String value, long timeout, TimeUnit unit) {
stringRedisTemplate.opsForValue().set(key, value, timeout, unit);
}
public boolean setIfAbsent(String key, String value) {
return stringRedisTemplate.opsForValue().setIfAbsent(key, value);
}
public void setRange(String key, String value, long offset) {
stringRedisTemplate.opsForValue().set(key, value, offset);
}
public Long size(String key) {
return stringRedisTemplate.opsForValue().size(key);
}
public void multiSet(Map maps) {
stringRedisTemplate.opsForValue().multiSet(maps);
}
public boolean multiSetIfAbsent(Map maps) {
return stringRedisTemplate.opsForValue().multiSetIfAbsent(maps);
}
public Long incrBy(String key, long increment) {
return stringRedisTemplate.opsForValue().increment(key, increment);
}
public Double incrByFloat(String key, double increment) {
return stringRedisTemplate.opsForValue().increment(key, increment);
}
public Integer append(String key, String value) {
return stringRedisTemplate.opsForValue().append(key, value);
}
//endregion
//region hash相关 *** 作
public Object hGet(String key, String field) {
return stringRedisTemplate.opsForHash().get(key, field);
}
public Map
package com.winshang.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
@Configuration
@EnableCaching
public class CacheRedisConfig extends RedisConfig {
@Value("${spring.redis.database}")
private int dbIndex;
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.timeout}")
private int timeout;
@Primary
@Bean(name ="cacheRedisFactory" )
public RedisConnectionFactory cacheRedisConnectionFactory() {
return createJedisConnectionFactory(dbIndex, host, port, password, timeout);
}
@Bean(name = "cacheRedisTemplate")
public StringRedisTemplate cacheRedisTemplate() {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(cacheRedisConnectionFactory());
setSerializer(stringRedisTemplate);
stringRedisTemplate.afterPropertiesSet();
return stringRedisTemplate;
}
}
package com.winshang.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
@Configuration
@EnableCaching
public class DefaultRedisConfig extends RedisConfig {
@Value("${spring.redis.database}")
private int dbIndex;
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.timeout}")
private int timeout;
@Bean(name ="defaultRedisFactory" )
public JedisConnectionFactory defaultRedisConnectionFactory() {
return createJedisConnectionFactory(dbIndex, host, port, password, timeout);
}
@Bean(name = "defaultRedisTemplate")
public StringRedisTemplate defaultRedisTemplate() {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(defaultRedisConnectionFactory());
setSerializer(stringRedisTemplate);
stringRedisTemplate.afterPropertiesSet();
return stringRedisTemplate;
}
}
package com.winshang.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
import java.lang.reflect.Method;
@EnableCaching
@Configuration
public class RedisConfig {
@Value("${spring.redis.pool.max-active}")
private int redisPoolMaxActive;
@Value("${spring.redis.pool.max-wait}")
private int redisPoolMaxWait;
@Value("${spring.redis.pool.max-idle}")
private int redisPoolMaxIdle;
@Value("${spring.redis.pool.min-idle}")
private int redisPoolMinIdle;
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object o, Method method, Object... objects) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(o.getClass().getName())
.append(method.getName());
for (Object object : objects) {
stringBuilder.append(object.toString());
}
return stringBuilder.toString();
}
};
}
public JedisConnectionFactory createJedisConnectionFactory(int dbIndex, String host, int port, String password, int timeout) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setDatabase(dbIndex);
jedisConnectionFactory.setHostName(host);
jedisConnectionFactory.setPort(port);
jedisConnectionFactory.setPassword(password);
jedisConnectionFactory.setTimeout(timeout);
jedisConnectionFactory.setPoolConfig(setPoolConfig(redisPoolMaxIdle, redisPoolMinIdle, redisPoolMaxActive, redisPoolMaxWait, true));
return jedisConnectionFactory;
}
// @Bean
// public CacheManager cacheManager(StringRedisTemplate stringRedisTemplate) {
// RedisCacheManager redisCacheManager = new RedisCacheManager(stringRedisTemplate);
// return redisCacheManager;
// }
public JedisPoolConfig setPoolConfig(int maxIdle, int minIdle, int maxActive, int maxWait, boolean testOnBorrow) {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setMaxTotal(maxActive);
poolConfig.setMaxWaitMillis(maxWait);
poolConfig.setTestonBorrow(testOnBorrow);
return poolConfig;
}
public void setSerializer(StringRedisTemplate stringRedisTemplate) {
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//设置键(key)的序列化方式
stringRedisTemplate.setKeySerializer(new StringRedisSerializer());
//设置值(value)的序列化方式
stringRedisTemplate.setValueSerializer(new StringRedisSerializer());
stringRedisTemplate.setHashKeySerializer(new StringRedisSerializer());
stringRedisTemplate.setHashValueSerializer(new StringRedisSerializer());
stringRedisTemplate.afterPropertiesSet();
}
}
@Autowired private RedisUtil redisUtil;
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)