java若依框架集成redis缓存详解

目录

  • 1、添加依赖
  • 2、修改配置
  • 3、增加配置
  • 4、增加工具类
  • 总结

1、添加依赖 ruoyi-common\pom.xml模块添加整合依赖
org.springframework.bootspring-boot-starter-data-rediscom.alibabafastjson


2、修改配置 ruoyi-admin目录下的application-druid.yml,添加redis配置
# 数据源配置spring:# redis配置redis:database: 0host: 127.0.0.1port: 6379password: timeout: 6000ms# 连接超时时长(毫秒)lettuce:pool:max-active: 1000# 连接池最大连接数(使用负值表示没有限制)max-wait: -1ms# 连接池最大阻塞等待时间(使用负值表示没有限制)max-idle: 10# 连接池中的最大空闲连接min-idle: 5# 连接池中的最小空闲连接


3、增加配置 ruoyi-framework目录下的config文件里,增加RedisConfig.java和FastJson2JsonRedisSerializer.java类
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.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; 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.serializer.StringRedisSerializer; /** * redis配置 * * @author YangPC */@Configuration@EnableCachingpublic class RedisConfig extends CachingConfigurerSupport {@Bean@SuppressWarnings(value = https://www.it610.com/article/{"unchecked", "rawtypes"})public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); serializer.setObjectMapper(mapper); // 使用StringRedisSerializer来序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(serializer); // Hash的key也采用StringRedisSerializer的序列化方式template.setHashKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(serializer); template.afterPropertiesSet(); return template; }}

import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.ParserConfig; import com.alibaba.fastjson.serializer.SerializerFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.TypeFactory; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; import org.springframework.util.Assert; import java.nio.charset.Charset; /** * Redis使用FastJson序列化 * * @author YangPC */public class FastJson2JsonRedisSerializer implements RedisSerializer{@SuppressWarnings("unused")private ObjectMapper objectMapper = new ObjectMapper(); public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private Class clazz; static{ParserConfig.getGlobalInstance().setAutoTypeSupport(true); }public FastJson2JsonRedisSerializer(Class clazz){super(); this.clazz = clazz; }@Overridepublic byte[] serialize(T t) throws SerializationException{if (t == null){return new byte[0]; }return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET); }@Overridepublic T deserialize(byte[] bytes) throws SerializationException{if (bytes == null || bytes.length <= 0){return null; }String str = new String(bytes, DEFAULT_CHARSET); return JSON.parseObject(str, clazz); }public void setObjectMapper(ObjectMapper objectMapper){Assert.notNull(objectMapper, "'objectMapper' must not be null"); this.objectMapper = objectMapper; }protected JavaType getJavaType(Class clazz){return TypeFactory.defaultInstance().constructType(clazz); }}


4、增加工具类 ruoyi-common模块下utils里面新增RedisCache.java类,有利于提高redis操作效率。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.BoundSetOperations; 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.util.*; import java.util.concurrent.TimeUnit; /** * spring redis 工具类 * * @author YangPC **/@SuppressWarnings(value = https://www.it610.com/article/{"unchecked", "rawtypes"})@Componentpublic class RedisCache {@Autowiredpublic RedisTemplate redisTemplate; /*** 缓存基本的对象,Integer、String、实体类等** @param key缓存的键值* @param value 缓存的值*/public void setCacheObject(final String key, final T value) {redisTemplate.opsForValue().set(key, value); }/*** 缓存基本的对象,Integer、String、实体类等** @param key缓存的键值* @param value缓存的值* @param timeout时间* @param timeUnit 时间颗粒度*/public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {redisTemplate.opsForValue().set(key, value, timeout, timeUnit); }/*** 设置有效时间** @param keyRedis键* @param timeout 超时时间* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout) {return expire(key, timeout, TimeUnit.SECONDS); }/*** 设置有效时间** @param keyRedis键* @param timeout 超时时间* @param unit时间单位* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout, final TimeUnit unit) {return redisTemplate.expire(key, timeout, unit); }/*** 获得缓存的基本对象。** @param key 缓存键值* @return 缓存键值对应的数据*/public T getCacheObject(final String key) {ValueOperations operation = redisTemplate.opsForValue(); return operation.get(key); }/*** 删除单个对象** @param key*/public boolean deleteObject(final String key) {return redisTemplate.delete(key); }/*** 删除集合对象** @param collection 多个对象* @return*/public long deleteObject(final Collection collection) {return redisTemplate.delete(collection); }/*** 缓存List数据** @param key缓存的键值* @param dataList 待缓存的List数据* @return 缓存的对象*/public long setCacheList(final String key, final List dataList) {Long count = redisTemplate.opsForList().rightPushAll(key, dataList); return count == null ? 0 : count; }/*** 获得缓存的list对象** @param key 缓存的键值* @return 缓存键值对应的数据*/public List getCacheList(final String key) {return redisTemplate.opsForList().range(key, 0, -1); }/*** 缓存Set** @param key缓存键值* @param dataSet 缓存的数据* @return 缓存数据的对象*/public BoundSetOperations setCacheSet(final String key, final Set dataSet) {BoundSetOperations setOperation = redisTemplate.boundSetOps(key); Iterator it = dataSet.iterator(); while (it.hasNext()) {setOperation.add(it.next()); }return setOperation; }/*** 获得缓存的set** @param key* @return*/public Set getCacheSet(final String key) {return redisTemplate.opsForSet().members(key); }/*** 缓存Map** @param key* @param dataMap*/public void setCacheMap(final String key, final Map dataMap) {if (dataMap != null) {redisTemplate.opsForHash().putAll(key, dataMap); }}/*** 获得缓存的Map** @param key* @return*/public Map getCacheMap(final String key) {return redisTemplate.opsForHash().entries(key); }/*** 往Hash中存入数据** @param keyRedis键* @param hKeyHash键* @param value 值*/public void setCacheMapValue(final String key, final String hKey, final T value) {redisTemplate.opsForHash().put(key, hKey, value); }/*** 获取Hash中的数据** @param keyRedis键* @param hKey Hash键* @return Hash中的对象*/public T getCacheMapValue(final String key, final String hKey) {HashOperations opsForHash = redisTemplate.opsForHash(); return opsForHash.get(key, hKey); }/*** 获取多个Hash中的数据** @param keyRedis键* @param hKeys Hash键集合* @return Hash对象集合*/public List getMultiCacheMapValue(final String key, final Collection hKeys) {return redisTemplate.opsForHash().multiGet(key, hKeys); }/*** 获得缓存的基本对象列表** @param pattern 字符串前缀* @return 对象列表*/public Collection keys(final String pattern) {return redisTemplate.keys(pattern); }/*** 判断Key是否存在** @param key* @return*/public boolean hasKey(String key) {return redisTemplate.hasKey(key); }/*** 清除缓存(自定义)*/public void cleanCache() {List keys = new ArrayList<>(); redisTemplate.delete(keys); }}

总结 【java若依框架集成redis缓存详解】本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

    推荐阅读