SpringBoot+Redis

mac2024-04-19  4

1、Redis安装(Ubuntu18.04)

sudo apt-get install redis-server redis-server -v #查看redis版本 redis-server #启动服务 redis-cli #启动客户端

2、配置pom文件,添加spring-boot-starter-data-redis支持

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>

3、配置application.properties文件

# REDIS (RedisProperties) # redis的数据库个数是可以配置的,默认为16个(0-15) spring.redis.database=0 # redis服务器地址 spring.redis.host=localhost # redis服务器连接端口 spring.redis.port=6379 spring.redis.password= # 连接池最大连接数(使用负值表示无限制) spring.redis.pool.max-active=8 # 连接池最大阻塞等待时间(使用负值表示无限制) spring.redis.pool.max-wait=-1 # 连接池中的最大空闲连接 spring.redis.pool.max-idle=8 # 连接池中的最小空闲连接 spring.redis.pool.min-idle=0 # 连接超时(毫秒) spring.redis.timeout=5000

4、添加Redis配置类

/** * Redis配置类 * @author user */ @Configuration public class RedisConfig { @Bean public <T> RedisTemplate<String, T> redisTemplateKeyString(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, T> redisTemplate = new RedisTemplate<>(); // 配置连接工厂 redisTemplate.setConnectionFactory(redisConnectionFactory); //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式) Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class); ObjectMapper objectMapper = new ObjectMapper(); // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常 objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); //使用StringRedisSerializer来序列化和反序列化redis的key值 redisTemplate.setKeySerializer(new StringRedisSerializer()); // 值采用json序列化 redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // 设置hash key 和value序列化模式 redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } }

5、Redis工具类

/** * Redis工具类 * @author user */ @Component public class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; public RedisUtil(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } /** * 指定缓存失效时间 * @param key 键 * @param time 时间(秒) * @return */ public boolean expire(String key, long time){ try { if(time > 0){ redisTemplate.expire(key, time, TimeUnit.SECONDS); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 根据key 获取过期时间 * @param key 键 不能为null * @return 时间(秒) 返回0代表为永久有效 */ public long getExpire(String key){ return redisTemplate.getExpire(key, TimeUnit.SECONDS); } /** * 判断key是否存在 * @param key 键 * @return true 存在 false不存在 */ public boolean hasKey(String key){ try { return redisTemplate.hasKey(key); } catch (Exception e) { e.printStackTrace(); return false; } } /** * 删除缓存 * @param key 可以传一个值 或多个 */ @SuppressWarnings("unchecked") public void del(String ... key){ if (key != null && key.length > 0){ if(key.length == 1){ redisTemplate.delete(key[0]); }else{ redisTemplate.delete(CollectionUtils.arrayToList(key)); } } } /** * 普通缓存获取 * @param key 键 * @return 值 */ public Object get(String key){ return key == null ? null : redisTemplate.opsForValue().get(key); } /** * 普通缓存放入 * @param key 键 * @param value 值 * @return true成功 false失败 */ public boolean set(String key, Object value) { try { redisTemplate.opsForValue().set(key, value); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * 普通缓存放入并设置时间 * @param key 键 * @param value 值 * @param time 时间 time要大于0 如果time小于等于0 将设置无限期 * @param unit 时间单位 * @return true成功 false 失败 */ public boolean set(String key, Object value, long time, TimeUnit unit){ try { if(time > 0){ redisTemplate.opsForValue().set(key, value, time, unit); }else{ set(key, value); } return true; } catch (Exception e) { e.printStackTrace(); return false; } } }

6、测试

写一个测试用例类来完成对redis的读写 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class RedisTest { @Resource private RedisUtil redisUtil; /** * 插入缓存数据 */ @Test public void set() { redisUtil.set("test_key", "test_value"); } /** * 读取缓存数据 */ @Test public void get() { String value = redisUtil.get("test_key"); System.out.println(value); } }

 

最新回复(0)