導入pom依賴
<!-- rdeis-data--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--jedis配置 官方推薦,現在項目一般不適應--> <!-- <dependency>--> <!-- <groupId>redis.clients</groupId>--> <!-- <artifactId>jedis</artifactId>--> <!-- <version>3.3.0</version>--> <!-- </dependency>-->
配置application,根據需求添加
spring.redis.host=127.0.0.1
spring.redis.port=6379
配置redis自動序列化
@Configuration public class RedisConfig { // 編寫redistamle @Bean @SuppressWarnings("all") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownException { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // json序列號 Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(om); // string序列號 StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); // key 采用string的序列化方式 template.setKeySerializer(stringRedisSerializer); // Hash的key 采用string的序列化方式 template.setHashKeySerializer(stringRedisSerializer); // value采用Jackson2JsonRedisSerializer的序列化方式 template.setValueSerializer(serializer); // Hash的value 采用Jackson2JsonRedisSerializer的序列化方式 template.setHashValueSerializer(serializer); // 配置具體的序列化方式 template.afterPropertiesSet(); return template; } }
編寫一個工具類,這個公司一般都會集成有。
@Component public class RedisUtils { @Autowired private RedisTemplate<String, Object> redisTemplate; /* *指定緩存實習時間 */ 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是否存在 * 返回0代表永久有效 */ public long getExpire(String key){ return redisTemplate.getExpire(key, TimeUnit.SECONDS); } /** * 判斷key是否存在 */ public boolean hasKey(String key){ try { return redisTemplate.hasKey(key); }catch (Exception e){ e.printStackTrace(); return false; } } /** * 刪除緩存 key可以傳多個或者一個 */ public void delKey(String... key){ if (key != null && key.length > 0){ if (key.length == 1){ redisTemplate.delete(key[1]); }else { for (int i = 0; i < key.length; i++){ redisTemplate.delete(key[i]); } } } } /** * 普通緩存獲取 */ public Object getObject(String key){ return key == null ? null : redisTemplate.opsForValue().get(key); } /** * 普通緩存存入 */ public boolean setObject(String key, Object value){ try{ redisTemplate.opsForValue().set(key, value); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 普通緩存存入並設置時間 * 如果time小於或等於0則設置無限期 */ public boolean setObjectTime(String key, Object value, long time){ try{ if (time > 0){ redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); }else { redisTemplate.opsForValue().set(key, value); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** *遞增 * key 鍵 * data 值 要增加幾大於0 */ public long incr(String key, long data){ if (data < 0){ throw new RuntimeException("遞增因子必須大於0"); } return redisTemplate.opsForValue().increment(key, data); } /** *遞減 * key 鍵 * data 值 要減少幾大於0 */ public long decr(String key, long data){ if (data < 0){ throw new RuntimeException("遞減因子必須大於0"); } return redisTemplate.opsForValue().decrement(key, -data); } /** * 獲取hashMap * key 鍵 * item 項 */ public Object hashGet(String key, String item){ return redisTemplate.opsForHash().get(key, item); } /** * 獲取hashMap對應的所有鍵值 * key 鍵 */ public Map<Object, Object> hashGetAll(String key){ return redisTemplate.opsForHash().entries(key); } /** * 存儲hashMap * key 鍵 * item 項 */ public boolean hashSet(String key, Map<String, Object> map){ try{ redisTemplate.opsForHash().putAll(key, map); return true; }catch (Exception e){ e.printStackTrace(); return false; } } /** * 存入hash並設置時間 */ public boolean hashSetTime(String key, Map<String, Object> map, long time){ try{ redisTemplate.opsForHash().putAll(key, map); if (time > 0){ expire(key, time); } return true; }catch (Exception e){ e.printStackTrace(); return false; } } // /** // * 獲取list // */ // public Object lGet(String key){ // return redisTemplate.opsForList().leftPop(key); // } // // /** // * 設置list // */ // // public boolean lSet(String key, List<Object> list, long time){ // try{ // if (time > 0){ // redisTemplate.opsForList().set(key,time, list); // }else { // redisTemplate.opsForList().leftPushAll(key, list); // } // return true; // }catch (Exception e){ // e.printStackTrace(); // return false; // } // } }