您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“spring-data-redis 2.0怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“spring-data-redis 2.0怎么用”這篇文章吧。
在使用Spring Boot2.x運行Redis時,發現百度不到順手的文檔,搞通后發現其實這個過程非常簡單和簡潔,覺得有必要拿出來分享一下。
Spring Boot2.x 不再使用Jedis,換成了Lettuce。Lettuce是基于 Netty 實現的,所以性能更好。但是我看到很多文章居然在Spring Boot 2.x還在寫Jedis的配置。
依賴
依賴比較簡單,spring-boot-starter-data-redis、commons-pool2 即可。
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--spring2.0集成redis所需common-pool2--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency>
屬性配置
在屬性中配置Redis Server的訪問地址、密碼、數據庫,并配置連接池的屬性。
redis: # reids的連接ip host: 127.0.0.1 port: 6379 password: helloworld # Redis默認情況下有16個分片,這里配置具體使用的分片,默認是0 database: 0 # 連接超時時間(毫秒) timeout: 10000ms # redis client配置,使用lettuce lettuce: pool: # 連接池中的最小空閑連接 默認 0 min-idle: 0 # 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1 max-wait: 1000ms # 連接池最大連接數(使用負值表示沒有限制) 默認 8 max-active: 8 # 連接池中的最大空閑連接 默認 8 max-idle: 8
注解配置
全局使能緩存
@EnableSwagger2 // 使用swagger api 功能 @EnableCaching // 使用緩存 @SpringBootApplication public class Starter { public static void main(String[] args) { SpringApplication.run(Starter.class, args); } }
通過注解使用緩存,@Cacheable 將獲取值存入緩存
/** * 基于id 獲取用戶信息 */ @Cacheable(value="user", key="#id", unless="#result == null") public UserDTO GetUserById(int id) { User userEntity = userMapper.getUserByID(id); if (userEntity == null){ return null; } /* entity 轉 DTO */ UserDTO userDTO = new UserDTO(); userDTO.setAge(userEntity.getAge()); userDTO.setId(id); userDTO.setName(userEntity.getName()); userDTO.setCreateTime(unixTime2String(userEntity.getCreateTime())); userDTO.setPhone(userEntity.getPhone()); userDTO.setEmail(userEntity.getEmail()); return userDTO; }
@CachePut 更新緩存
@CachePut(value = "user", key="#p0.id") public UserDTO updateUser(InputUserInfoDTO inputUserInfoDTO){ userMapper.updateUser(inputUserInfoDTO.getId(), inputUserInfoDTO.getName(), inputUserInfoDTO.getAge()); User userEntity = userMapper.getUserByID(inputUserInfoDTO.getId());/* entity 轉 DTO */ if (null == userEntity){ return null; } UserDTO userDTO = new UserDTO(); userDTO.setAge(userEntity.getAge()); userDTO.setId(userEntity.getId()); userDTO.setName(userEntity.getName()); userDTO.setCreateTime(unixTime2String(userEntity.getCreateTime())); userDTO.setPhone(userEntity.getPhone()); userDTO.setEmail(userEntity.getEmail()); return userDTO; }
@CacheEvict 刪除緩存
@CacheEvict(value = "user", key="#id") public void deleteUser(int id){ userMapper.deleteUser(id); }
當然為了支持序列化,我的UserDTO得implements Serializable
@Data public class UserDTO implements Serializable { //public class UserDTO implements Serializable { private int id; private String name; private int age; private String createTime; private String phone; private String email; }
至此緩存已經可以用起來了,不需要編寫RedisConfig代碼,有點小遺憾,直接去Redis查看數據,發現是亂碼。這是因為我使用的是Java自帶的序列化,如果要更換Redis序列化方法,就要重寫RedisConfig了。
RedisConfig
這個配置也不復雜,使用Jackson2JsonRedisSerializer將對象轉換為Json串,注意這里一定要使用ObjectMapper,否則再將json串反序列化為對象時會報。
@Configuration @ConditionalOnClass(RedisOperations.class) @EnableConfigurationProperties(RedisProperties.class) public class RedisConfig extends CachingConfigurerSupport{ @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer<String> redisSerializer = new StringRedisSerializer(); 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); // 配置序列化(解決亂碼的問題) RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ZERO) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory).cacheDefaults(config).build(); return cacheManager; } }
以上是“spring-data-redis 2.0怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。