欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot 快速集成 Redis的方法

 更新時(shí)間:2020年07月14日 09:57:25   作者:Java技術(shù)棧  
這篇文章主要介紹了Spring Boot 如何快速集成 Redis,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Spring Boot 如何快速集成 Redis?沒(méi)錯(cuò),棧長(zhǎng)本文教你,讓大家少走彎路!

添加依賴

使用像 Redis 這類的 NoSQL 數(shù)據(jù)庫(kù)就必須要依賴 spring-data-redis 這樣的能力包,開箱即用,Spring Boot 中都封裝好了:

引入spring-boot-starter-data-redis:

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

Spring Boot 基礎(chǔ)知識(shí)就不介紹了,不熟悉的可以關(guān)注公眾號(hào)Java技術(shù)棧,在后臺(tái)回復(fù):boot,可以閱讀我寫的歷史實(shí)戰(zhàn)教程。

它主要包含了下面四個(gè)依賴:

  • spring-boot-dependencies
  • spring-boot-starter
  • spring-data-redis
  • lettuce-core

添加 Redis 連接配置

Redis 自動(dòng)配置支持配置單機(jī)、集群、哨兵,來(lái)看下 RedisProperties 的參數(shù)類圖吧:

本文以單機(jī)為示例,我們?cè)?application.yml 配置文件中添加 Redis 連接配置,:

spring:
  redis:
    host: 192.168.8.88
    port: 6379
    password: redis2020
    database: 1

也可以將參數(shù)配置在 Spring Cloud Config Server 配置中心中。

Redis 自動(dòng)配置

添加完依賴和連接配置參數(shù)之后,Redis 就能自動(dòng)配置,參考 Redis 的自動(dòng)配置類:

org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

源碼:

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {

    ...

}

通過(guò)看源碼,Redis內(nèi)置兩種客戶端的自動(dòng)配置:

1)Lettuce(默認(rèn)):

org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration

2)Jedis:

org.springframework.boot.autoconfigure.data.redis.JedisConnectionConfiguration

為什么默認(rèn)Lettuce,其實(shí)文章之前的四個(gè)依賴也看出來(lái)了,請(qǐng)看默認(rèn)依賴:

自動(dòng)配置提供了兩種操作模板:

1)RedisTemplate<Object, Object>

key-value 都為 Object 對(duì)象,并且默認(rèn)用的 JDK 的序列化/反序列化器:

org.springframework.data.redis.serializer.JdkSerializationRedisSerializer

使用這個(gè)序列化器,key 和 value 都需要實(shí)現(xiàn) java.io.Serializable 接口。

2)StringRedisTemplate

key-value 都為 String 對(duì)象,默認(rèn)用的 String UTF-8 格式化的序列化/反序列化器:

org.springframework.data.redis.serializer.StringRedisSerializer

上面提到了兩種序列化器,另外還有兩種 JSON 的序列化器值得學(xué)習(xí)一下,下面配置會(huì)用到。

  • Jackson2JsonRedisSerializer
  • GenericJackson2JsonRedisSerializer

使用方式上,兩種都可以序列化、反序列化 JSON 數(shù)據(jù),Jackson2JsonRedisSerializer 效率高,但 GenericJackson2JsonRedisSerializer 更為通用,不需要指定泛型類型。

核心配置

除了自動(dòng)配置之外,下面是 Redis 的核心配置,主要是自定義了 RedisTemplate 使用 JSON 序列化器。

另外就是,把幾個(gè)數(shù)據(jù)類型的操作類進(jìn)行了 Bean 池化處理。

@Configuration
public class RedisConfig {

 @Bean
 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
  RedisTemplate<String, Object> template = new RedisTemplate<>();
  template.setConnectionFactory(factory);

  StringRedisSerializer stringSerializer = new StringRedisSerializer();

  RedisSerializer jacksonSerializer = getJacksonSerializer();

  template.setKeySerializer(stringSerializer);
  template.setValueSerializer(jacksonSerializer);
  template.setHashKeySerializer(stringSerializer);
  template.setHashValueSerializer(jacksonSerializer);
  template.setEnableTransactionSupport(true);
  template.afterPropertiesSet();

  return template;
 }

 private RedisSerializer getJacksonSerializer() {
  ObjectMapper om = new ObjectMapper();
  om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  return new GenericJackson2JsonRedisSerializer(om);
 }

 @Bean
 public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
  return redisTemplate.opsForHash();
 }

 @Bean
 public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
  return redisTemplate.opsForValue();
 }

 @Bean
 public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
  return redisTemplate.opsForList();
 }

 @Bean
 public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
  return redisTemplate.opsForSet();
 }

 @Bean
 public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
  return redisTemplate.opsForZSet();
 }

}

如果你只想用默認(rèn)的 JDK 序列化器,那 RedisTemplate 相關(guān)配置就不是必須的。

緩存實(shí)戰(zhàn)

下面寫了一個(gè)示例,用來(lái)緩存并讀取緩存中一個(gè)類對(duì)象。

@GetMapping("/redis/set")
public String set(@RequestParam("name") String name) {
 User user = new User();
 user.setId(RandomUtils.nextInt());
 user.setName(name);
 user.setBirthday(new Date());

 List<String> list = new ArrayList<>();
 list.add("sing");
 list.add("run");
 user.setInteresting(list);

 Map<String, Object> map = new HashMap<>();
 map.put("hasHouse", "yes");
 map.put("hasCar", "no");
 map.put("hasKid", "no");
 user.setOthers(map);

 redisOptService.set(name, user, 30000);
 User userValue = (User) redisOptService.get(name);
 return userValue.toString();
}

測(cè)試:

http://localhost:8080/redis/set?name=zhangsan

返回:

User(id=62386235, name=zhangsan, birthday=Tue Jun 23 18:04:55 CST 2020, interesting=[sing, run], others={hasHouse=yes, hasKid=no, hasCar=no})

Redis中的值:

192.168.8.88:6379> get zhangsan
"["cn.javastack.springboot.redis.pojo.User",{"id":62386235,"name":"zhangsan","birthday":["java.util.Date",1592906695750],"interesting":["java.util.ArrayList",["sing","run"]],"others":["java.util.HashMap",{"hasHouse":"yes","hasKid":"no","hasCar":"no"}]}]"

好啦,Spring Boot 快速集成 Redis 就到這了,下篇帶來(lái) Spring Boot 如何快速集成 Redis 分布式鎖,關(guān)注公眾號(hào)Java技術(shù)棧,第一時(shí)間推送,敬請(qǐng)期待……

本文完整源代碼也將和下篇一起上傳到Github,歡迎大家 Star 關(guān)注學(xué)習(xí)。

https://github.com/javastacks/spring-boot-best-practice

推薦去我的博客閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架構(gòu)、阿里巴巴等大廠最新面試題

到此這篇關(guān)于Spring Boot 快速集成 Redis的方法的文章就介紹到這了,更多相關(guān)spring boot 集成redis內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java 信號(hào)量Semaphore

    詳解Java 信號(hào)量Semaphore

    這篇文章主要介紹了Java 信號(hào)量Semaphore的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java并發(fā),感興趣的朋友可以了解下
    2020-09-09
  • mybatis模糊查詢like語(yǔ)句該如何寫

    mybatis模糊查詢like語(yǔ)句該如何寫

    MyBatis模糊查詢通常使用LIKE關(guān)鍵字,結(jié)合concat函數(shù)拼接通配符%實(shí)現(xiàn),在MyBatis配置文件中,通過(guò)#{keyword}傳遞參數(shù),生成帶有通配符的查詢語(yǔ)句,MyBatis-Plus中,通過(guò)LambdaQueryWrapper類和like方法構(gòu)建模糊查詢條件,簡(jiǎn)化查詢操作
    2024-09-09
  • Java通過(guò)SSLEngine與NIO實(shí)現(xiàn)HTTPS訪問(wèn)的操作方法

    Java通過(guò)SSLEngine與NIO實(shí)現(xiàn)HTTPS訪問(wèn)的操作方法

    這篇文章主要介紹了Java通過(guò)SSLEngine與NIO實(shí)現(xiàn)HTTPS訪問(wèn),需要在Connect操作、Connected操作、Read和Write操作中加入SSL相關(guān)的處理即可,需要的朋友可以參考下
    2021-08-08
  • 使用springboot aop來(lái)實(shí)現(xiàn)讀寫分離和事物配置

    使用springboot aop來(lái)實(shí)現(xiàn)讀寫分離和事物配置

    這篇文章主要介紹了使用springboot aop來(lái)實(shí)現(xiàn)讀寫分離和事物配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 什么是Java自旋鎖

    什么是Java自旋鎖

    這篇文章主要介紹了什么是Java自旋鎖,在有些場(chǎng)景中,同步資源的鎖定時(shí)間很短,為了這一小段時(shí)間去切換線程,線程掛起和恢復(fù)現(xiàn)場(chǎng)的花費(fèi)可能會(huì)讓系統(tǒng)得不償失,下面來(lái)了解具體內(nèi)容介紹吧
    2022-01-01
  • 關(guān)于SpringBoot整合RabbitMQ實(shí)現(xiàn)死信隊(duì)列

    關(guān)于SpringBoot整合RabbitMQ實(shí)現(xiàn)死信隊(duì)列

    這篇文章主要介紹了關(guān)于SpringBoot整合RabbitMQ實(shí)現(xiàn)死信隊(duì)列,死信隊(duì)列實(shí)際上就是一個(gè)普通的隊(duì)列,只是這個(gè)隊(duì)列跟死信交換機(jī)進(jìn)行了綁定,用來(lái)存放死信而已,需要的朋友可以參考下
    2023-05-05
  • 詳解SpringBoot中@NotNull,@NotBlank注解使用

    詳解SpringBoot中@NotNull,@NotBlank注解使用

    這篇文章主要為大家詳細(xì)介紹了Spring?Boot中集成Validation與@NotNull,@NotBlank等注解的簡(jiǎn)單使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • java實(shí)現(xiàn)字符串匹配求兩個(gè)字符串的最大公共子串

    java實(shí)現(xiàn)字符串匹配求兩個(gè)字符串的最大公共子串

    這篇文章主要介紹了java實(shí)現(xiàn)求兩個(gè)字符串最大公共子串的方法,詳細(xì)的描述了兩個(gè)字符串的最大公共子串算法的實(shí)現(xiàn),需要的朋友可以參考下
    2016-10-10
  • SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    SpringBoot 整合 Netty 多端口監(jiān)聽的操作方法

    Netty提供異步的、基于事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架,用以快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò) IO 程序,是目前最流行的 NIO 框架,這篇文章主要介紹了SpringBoot 整和 Netty 并監(jiān)聽多端口,需要的朋友可以參考下
    2023-10-10
  • 詳解Java快速上手用戶后臺(tái)管理系統(tǒng)

    詳解Java快速上手用戶后臺(tái)管理系統(tǒng)

    只有在實(shí)戰(zhàn)中練習(xí)才能真正獲得能力的提升,本篇文章手把手帶你用Java快速上手實(shí)現(xiàn)一個(gè)用戶后臺(tái)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-01-01

最新評(píng)論