Redis配置

#Redis
spring.redis.host=
spring.redis.port=6379
spring.redis.database=0
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=1500
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=30000

RedisConfig.java Redis配置文件


import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
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.stereotype.Component; import java.lang.reflect.Method; @Configuration
@Component
public class RedisConfig extends CachingConfigurerSupport { private static final Logger logger = LoggerFactory.getLogger(RedisConfig.class); public RedisConfig(){
logger.info("init RedisConfig...");
} /**
* 生成key的策略
*
* @return
*/
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
} /**
* 管理缓存
*
* @param redisTemplate
* @return
*/
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
//设置缓存过期时间
// rcm.setDefaultExpiration(60);//秒
return rcm;
} /**
* RedisTemplate配置
* @param factory
* @return
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
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);
template.setValueSerializer(jackson2JsonRedisSerializer);//如果key是String 需要配置一下StringSerializer,不然key会乱码 /XX/XX
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
} }

RedisUtils.java Redis工具类

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.DataType;
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.Component; import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit; /**
* redicache 工具类
*
*/
@SuppressWarnings("unchecked")
@Component
public class RedisUtils { private static final Logger log = LoggerFactory.getLogger(RedisUtils.class); private static final PropertiesUtils redisProper = new PropertiesUtils("spring/redis-time-config.properties"); @SuppressWarnings("rawtypes")
@Autowired
private RedisTemplate redisTemplate; /**
* 批量删除对应的value
*
* @param keys
*/
public void remove(final String... keys) {
for (String key : keys) {
remove(key);
}
} public int getCountPattern(String pattern){
Set<Serializable> keys = redisTemplate.keys(pattern);
return keys==null?0:keys.size();
}
/**
* 批量删除key
*
* @param pattern
*/
public void removePattern(final String pattern) {
Set<Serializable> keys = redisTemplate.keys(pattern);
if (keys.size() > 0)
redisTemplate.delete(keys);
} /**
* 批量删除key
*
* @param keys
*/
public void removeKeys(final Set<String> keys) {
if (keys.size() > 0)
redisTemplate.delete(keys);
} public Long ttl(String key) {
return StringUtils.isNoneEmpty(key) ? Long.valueOf(-1L) : redisTemplate.getExpire(key);
} /**
* 删除对应的value
*
* @param key
*/
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
} /**
* 判断缓存中是否有对应的value
*
* @param key
* @return
*/
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
} /**
* 读取缓存
*
* @param key
* @return
*/
public Object get(final String key) {
Object result = null;
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
result = operations.get(key);
return result;
} /**
* 读取缓存
*
* @param key
* @return
*/
public Long size(final String key) {
Long result = null;
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
result = operations.size(key);
return result;
} public <K> Set<K> keys(K pattern){
return redisTemplate.keys(pattern);
} /**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value) {
boolean result = false;
try {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
operations.set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} /**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value, Long expireTime) {
return set(key, value, expireTime, TimeUnit.SECONDS);
} /**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean set(final String key, Object value, Long expireTime, TimeUnit timeUnit) {
boolean result = false;
try {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
operations.set(key, value);
redisTemplate.expire(key, expireTime, timeUnit);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} /**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean setInt(final String key, int value, Long expireTime, TimeUnit timeUnit) {
boolean result = false;
try {
ValueOperations<String, Integer> operations = redisTemplate.opsForValue();
operations.set(key, value);
redisTemplate.expire(key, expireTime, timeUnit);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} /**
* 写入缓存
*
* @param key
* @param value
* @return
*/
public boolean setInt(final String key, int value) {
boolean result = false;
try {
ValueOperations<String, Integer> operations = redisTemplate.opsForValue();
operations.set(key, value);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
} /**
* 写入缓存
*
* @param key
* @param key
* @return
*/
public int getInt(final String key) {
int result = -1;
if (exists(key)) {
ValueOperations<String, Integer> operations = redisTemplate.opsForValue();
result = operations.get(key);
}
return result;
} public Long increment(String key, long val){
if( exists(key) ){
return redisTemplate.opsForValue().increment(key, val);
}
return null;
} public Long addHyperLogLog(Object val1, Object ...val2){
return redisTemplate.opsForHyperLogLog().add(val1, val2);
} public Long sAdd(Object key, Object... values) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().add(key, values);
} public Set<String> sMembers(String key) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().members(key);
} public Long sRem(Object key, Object... values) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().remove(key, values);
} public Object sPop(Object key) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().pop(key);
} public boolean sMove(Object srcKey, Object destKey, Object member) {
return (!isNullOrEmpty(srcKey) && !isNullOrEmpty(destKey)) && ((member != null) && redisTemplate.opsForSet().move(srcKey, member, destKey));
} public Long sLen(Object key) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForSet().size(key);
} public boolean sIsMember(Object key, Object member) {
return !isNullOrEmpty(key) && redisTemplate.opsForSet().isMember(key, member);
} public Set<Object> sInter(Object key, Object... keys) {
return key == null ? null : redisTemplate.opsForSet().intersect(key, keys);
} public Long sInterStore(Object destKey, Object srckey, Object... srcKeys) {
return !isNullOrEmpty(destKey) && srckey != null ? redisTemplate.opsForSet().intersectAndStore(srckey, srcKeys, destKey) : null;
} public Set<Object> sUnion(Object... keys) {
if (keys != null && keys.length != 0) {
List keyList = Arrays.asList(keys);
return redisTemplate.opsForSet().union(keyList.remove(0), keyList);
} else {
return null;
}
} public Long sUnionStore(Object dstKey, Object... keys) {
if (keys != null && keys.length != 0 && dstKey != null) {
List keyList = Arrays.asList(keys);
return redisTemplate.opsForSet().unionAndStore(keyList.remove(0), keyList, dstKey);
} else {
return null;
}
} public Set<Object> sDiff(Object... keys) {
if (keys != null && keys.length != 0) {
List keyList = Arrays.asList(keys);
return redisTemplate.opsForSet().difference(keyList.remove(0), keyList);
} else {
return null;
}
} public Long sDiffStore(Object dstKey, Object... keys) {
if (!isNullOrEmpty(dstKey) && keys != null && keys.length != 0) {
List keyList = Arrays.asList(keys);
return redisTemplate.opsForSet().differenceAndStore(keyList.remove(0), keyList, dstKey);
} else {
return null;
}
} public boolean hSet(String key, Map<String, Object> param, Long expireTime, TimeUnit timeUnit) {
try {
hSet(key, param);
redisTemplate.expire(key, expireTime, timeUnit);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
} public void hSet(String key, Map<String, Object> param) {
HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();
Set<Map.Entry<String, Object>> entrySet = param.entrySet();
for (Map.Entry<String, Object> entry : entrySet) {
hashOperations.put(key, entry.getKey(), entry.getValue());
}
} public void hSet(String key, Object field, Object value) {
redisTemplate.opsForHash().put(key, field, value);
} public Object hGet(String key, Object field) {
if (StringUtils.isEmpty(key)) {
return null;
}
return redisTemplate.opsForHash().get(key, field);
} public String hGet(String key, String field) {
if (StringUtils.isEmpty(key)) {
return null;
}
HashOperations<String, String, String> hashOperations = redisTemplate.opsForHash();
return hashOperations.get(key, field);
} public boolean hExists(String key, Object hashKey) {
return !isNullOrEmpty(key) && redisTemplate.opsForHash().hasKey(key, hashKey);
} public Long hDel(Object key, Object... hashKeys) {
return isNullOrEmpty(key) ? Long.valueOf(0L) : redisTemplate.opsForHash().delete(key, hashKeys);
} public Long hLen(String key) {
return StringUtils.isNoneEmpty(key) ? Long.valueOf(0L) : redisTemplate.opsForHash().size(key);
} public Set<Object> hKeys(Object key) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForHash().keys(key);
} public List<Object> hValues(Object key) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForHash().values(key);
} public Map<Object, Object> hGetAll(Object key) {
return isNullOrEmpty(key) ? null : redisTemplate.opsForHash().entries(key);
} public Object getUnknownType(Object key){
try {
DataType dataType = redisTemplate.type(key);
switch (dataType){
case NONE:
log.info("key:[{}]不存在", key);
return null;
case STRING:
return redisTemplate.opsForValue().get(key);
case LIST:
return redisTemplate.opsForList().range(key, 0, -1);
case SET:
return redisTemplate.opsForSet().members(key);
case ZSET:
return redisTemplate.opsForZSet().range(key, 0, -1);
case HASH:
return redisTemplate.opsForHash().entries(key);
default:
return null;
}
}catch (Exception e){
log.error("查询出现异常:{}", e);
return null;
}
} private static boolean isNullOrEmpty(Object obj) {
boolean result = false;
if (obj == null || "null".equals(obj) || "".equals(obj.toString().trim())) {
result = true;
}
return result;
} public void setRedisValue(String key, Object value,String redisKey){
//添加缓存
String[] redispropers=redisProper.getPropertiesValues(redisKey);
Long redisExp=Long.valueOf(redispropers[0]);
TimeUnit redisTimeType= UtilHelper.getTimeUtil(redispropers[1]);
redisTemplate.opsForValue().set(key,value,redisExp, redisTimeType);
} }

SpringBoot Redis序列化配置的更多相关文章

  1. Springboot+Redis序列化坑

    今天在测试springboot整合redis的时候遇到下面这个坑,百度来百度去发现提示都是ajax的问题,真的是醉了,错误提示如下所示,不信大家可以直接复制百度一下答案是什么(流泪中....),错误如 ...

  2. Spring Boot 结合 Redis 序列化配置的一些问题

    前言 最近在学习Spring Boot结合Redis时看了一些网上的教程,发现这些教程要么比较老,要么不知道从哪抄得,运行起来有问题.这里分享一下我最新学到的写法 默认情况下,Spring 为我们提供 ...

  3. springboot +redis配置

    springboot +redis配置 pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

  4. SpringBoot + Redis:基本配置及使用

    注:本篇博客SpringBoot版本为2.1.5.RELEASE,SpringBoot1.0版本有些配置不适用 一.SpringBoot 配置Redis 1.1 pom 引入spring-boot-s ...

  5. Spring-Boot项目中配置redis注解缓存

    Spring-Boot项目中配置redis注解缓存 在pom中添加redis缓存支持依赖 <dependency> <groupId>org.springframework.b ...

  6. (二)Redis在Mac下的安装与SpringBoot中的配置

    1 下载Redis 官网下载,下载 stable 版本,稳定版本. 2 本地安装 解压:tar zxvf redis-6.0.1.tar.gz 移动到: sudo mv redis-6.0.1 /us ...

  7. SpringBoot Redis使用fastjson进行序列化

    在使用spring-data-redis,默认情况下是使用org.springframework.data.redis.serializer.JdkSerializationRedisSerializ ...

  8. 补习系列(14)-springboot redis 整合-数据读写

    目录 一.简介 二.SpringBoot Redis 读写 A. 引入 spring-data-redis B. 序列化 C. 读写样例 三.方法级缓存 四.连接池 小结 一.简介 在 补习系列(A3 ...

  9. 补习系列(13)-springboot redis 与发布订阅

    目录 一.订阅发布 常见应用 二.Redis 与订阅发布 三.SpringBoot 与订阅发布 A. 消息模型 B. 序列化 C. 发布消息 D. 接收消息 小结 一.订阅发布 订阅发布是一种常见的设 ...

随机推荐

  1. spring-mvc.xml的定时器配置

    <!-- 设置时间 --> <bean id="myJobTrigger" class="org.springframework.scheduling. ...

  2. 【转载】VS2015 + EF6连接MYSQL5.6

    引用文章:https://jingyan.baidu.com/article/ce09321b9cc43f2bff858fbf.html 安装包注意点说明: 1.程序名称:mysql-for-visu ...

  3. 关于TP3.2框架读取Sql server中文字段数据以及处理乱码的一些小心得

    最近要做一个项目,需要使用TP3.2框架,之前什么也不会,就硬着头皮上了,结果真的闹了挺多emmmmmm挺低级的错误,就像SQL Server中文字段的读取,一开始我是照着读取英文字段的格式来写的,在 ...

  4. 微信小程序相关

    https://www.cnblogs.com/shenzikun1314/p/7805168.html

  5. poj 2965 枚举+DFS

    The Pilots Brothers' refrigerator Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25343 ...

  6. sap对字符串的操作

    REPLACE  替换字段内容 TRANSLATE 转换大/小写 FIND FIRST OCCURRENCE OF 查找字符串 替换字段内容 REPLACE [FIRST /ALL OCCURRENC ...

  7. 8 Django 模型层(1)--orm简介

    ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  8. Codeforces 787D Legacy 线段树 最短路

    题意: 有\(n(1 \leq n \leq 10^5)\)个点,\(q(1 \leq q \leq 10^5)\)条路和起点\(s\) 路有三种类型: 从点\(v\)到点\(u\)需要花费\(w\) ...

  9. oracle(sql)基础篇系列(三)——数据维护语句、数据定义语句、伪列

    DML语句 insert 向表中插入新的记录 --三种插入方式 --(1)不写字段的名字,直接按照字段的顺序把值逐个往里插 insert into dept2 values(50,'DANAME',' ...

  10. FMDB的线程安全

    最近面试被问到FMDB的多线程处理问题,因为之前项目中是移植别人的代码,没有踩过这里的坑. 问题: 多线程同时访问数据库时,报数据库锁定的问题,错误信息是: Unknown error finaliz ...