赞
踩
SpringBoot中操作spring redis的工具类:
SpringBoot中操作spring redis的工具类_霸道流氓气质的博客-CSDN博客
上面讲的操作redis的工具类,但是对于redis的集成并没做细讲。
下面参考若依框架的实现,从中抽离出集成redis的部分实现。
若依前后端分离版本地搭建开发环境并运行项目的教程:
若依前后端分离版手把手教你本地搭建环境并运行项目_霸道流氓气质的博客-CSDN博客
新建SpringBoot项目之后,添加redsi以及fastjson的相关依赖
- <!-- redis 缓存操作 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
-
- <!-- 阿里JSON解析器 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>fastjson</artifactId>
- <version>1.2.75</version>
- </dependency>
注:
博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
1、新建Redis的配置类
- package com.badao.demo.config;
-
-
- 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.context.annotation.Primary;
- import org.springframework.data.redis.connection.RedisConnectionFactory;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.StringRedisSerializer;
- 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;
-
- /**
- * redis配置
- *
- */
- @Configuration
- @EnableCaching
- public class RedisConfig extends CachingConfigurerSupport
- {
- @Bean
- @SuppressWarnings(value = { "unchecked", "rawtypes" })
- @Primary
- public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
- {
- RedisTemplate<Object, Object> 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);
-
- template.setValueSerializer(serializer);
- // 使用StringRedisSerializer来序列化和反序列化redis的key值
- template.setKeySerializer(new StringRedisSerializer());
- template.afterPropertiesSet();
- return template;
- }
- }
2、新建Redis使用FastJson序列化的工具类
- package com.badao.demo.config;
-
- 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 ruoyi
- */
- public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
- {
- @SuppressWarnings("unused")
- private ObjectMapper objectMapper = new ObjectMapper();
-
- public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
-
- private Class<T> clazz;
-
- static
- {
- ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
- }
-
- public FastJson2JsonRedisSerializer(Class<T> clazz)
- {
- super();
- this.clazz = clazz;
- }
-
- @Override
- public byte[] serialize(T t) throws SerializationException
- {
- if (t == null)
- {
- return new byte[0];
- }
- return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
- }
-
- @Override
- public 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);
- }
- }
3、新建redis的工具类
- package com.badao.demo.utils;
-
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.concurrent.TimeUnit;
- 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.ListOperations;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.core.ValueOperations;
- import org.springframework.stereotype.Component;
-
- /**
- * spring redis 工具类
- *
- **/
- @SuppressWarnings(value = { "unchecked", "rawtypes" })
- @Component
- public class RedisCache
- {
- @Autowired
- public RedisTemplate redisTemplate;
-
- /**
- * 缓存基本的对象,Integer、String、实体类等
- *
- * @param key 缓存的键值
- * @param value 缓存的值
- * @return 缓存的对象
- */
- public <T> ValueOperations<String, T> setCacheObject(String key, T value)
- {
- ValueOperations<String, T> operation = redisTemplate.opsForValue();
- operation.set(key, value);
- return operation;
- }
-
- /**
- * 缓存基本的对象,Integer、String、实体类等
- *
- * @param key 缓存的键值
- * @param value 缓存的值
- * @param timeout 时间
- * @param timeUnit 时间颗粒度
- * @return 缓存的对象
- */
- public <T> ValueOperations<String, T> setCacheObject(String key, T value, Integer timeout, TimeUnit timeUnit)
- {
- ValueOperations<String, T> operation = redisTemplate.opsForValue();
- operation.set(key, value, timeout, timeUnit);
- return operation;
- }
-
- /**
- * 获得缓存的基本对象。
- *
- * @param key 缓存键值
- * @return 缓存键值对应的数据
- */
- public <T> T getCacheObject(String key)
- {
- ValueOperations<String, T> operation = redisTemplate.opsForValue();
- return operation.get(key);
- }
-
- /**
- * 删除单个对象
- *
- * @param key
- */
- public void deleteObject(String key)
- {
- redisTemplate.delete(key);
- }
-
- /**
- * 删除集合对象
- *
- * @param collection
- */
- public void deleteObject(Collection collection)
- {
- redisTemplate.delete(collection);
- }
-
- /**
- * 缓存List数据
- *
- * @param key 缓存的键值
- * @param dataList 待缓存的List数据
- * @return 缓存的对象
- */
- public <T> ListOperations<String, T> setCacheList(String key, List<T> dataList)
- {
- ListOperations listOperation = redisTemplate.opsForList();
- if (null != dataList)
- {
- int size = dataList.size();
- for (int i = 0; i < size; i++)
- {
- listOperation.leftPush(key, dataList.get(i));
- }
- }
- return listOperation;
- }
-
- /**
- * 获得缓存的list对象
- *
- * @param key 缓存的键值
- * @return 缓存键值对应的数据
- */
- public <T> List<T> getCacheList(String key)
- {
- List<T> dataList = new ArrayList<T>();
- ListOperations<String, T> listOperation = redisTemplate.opsForList();
- Long size = listOperation.size(key);
-
- for (int i = 0; i < size; i++)
- {
- dataList.add(listOperation.index(key, i));
- }
- return dataList;
- }
-
- /**
- * 缓存Set
- *
- * @param key 缓存键值
- * @param dataSet 缓存的数据
- * @return 缓存数据的对象
- */
- public <T> BoundSetOperations<String, T> setCacheSet(String key, Set<T> dataSet)
- {
- BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
- Iterator<T> it = dataSet.iterator();
- while (it.hasNext())
- {
- setOperation.add(it.next());
- }
- return setOperation;
- }
-
- /**
- * 获得缓存的set
- *
- * @param key
- * @return
- */
- public <T> Set<T> getCacheSet(String key)
- {
- Set<T> dataSet = new HashSet<T>();
- BoundSetOperations<String, T> operation = redisTemplate.boundSetOps(key);
- dataSet = operation.members();
- return dataSet;
- }
-
- /**
- * 缓存Map
- *
- * @param key
- * @param dataMap
- * @return
- */
- public <T> HashOperations<String, String, T> setCacheMap(String key, Map<String, T> dataMap)
- {
- HashOperations hashOperations = redisTemplate.opsForHash();
- if (null != dataMap)
- {
- for (Map.Entry<String, T> entry : dataMap.entrySet())
- {
- hashOperations.put(key, entry.getKey(), entry.getValue());
- }
- }
- return hashOperations;
- }
-
- /**
- * 获得缓存的Map
- *
- * @param key
- * @return
- */
- public <T> Map<String, T> getCacheMap(String key)
- {
- Map<String, T> map = redisTemplate.opsForHash().entries(key);
- return map;
- }
-
- /**
- * 获得缓存的基本对象列表
- *
- * @param pattern 字符串前缀
- * @return 对象列表
- */
- public Collection<String> keys(String pattern)
- {
- return redisTemplate.keys(pattern);
- }
- }
4、存储数据测试
- package com.badao.demo;
-
- import com.badao.demo.utils.RedisCache;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- import java.util.concurrent.TimeUnit;
-
- @SpringBootTest
- class TcpdemoApplicationTests {
-
-
- @Autowired
- RedisCache redisCache;
-
- @Test
- void test1() {
- redisCache.setCacheObject("bbb","222",10, TimeUnit.SECONDS);
- String aaa = redisCache.getCacheObject("bbb");
- System.out.println(aaa);
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。