<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      從零開始學Spring Boot系列-集成Redis

      Redis簡介

      在開始集成之前,了解Redis的基礎知識是非常重要的。Redis是一個開源的、使用ANSI C編寫的、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。它通常被稱為數據結構服務器,因為值(value)可以是 字符串(string)、哈希(Hash)、列表(list)、集合(sets)、有序集合(sorted sets)等類型。
      集成Redis到Spring Boot項目中的作用主要體現在以下幾個方面:

      1. 緩存機制
        Redis作為一個高性能的內存數據存儲系統,非常適合作為緩存層。通過將部分數據存儲在Redis中,可以顯著減少直接從數據庫等慢速存儲中讀取數據的次數,從而提高應用程序的響應速度和性能。在Spring Boot項目中集成Redis,可以方便地利用Redis的緩存機制,將熱點數據或計算密集型數據緩存到Redis中,減少數據庫壓力,提高系統吞吐量。
      2. 會話管理
        在Web應用程序中,用戶會話的管理是一個重要的環節。傳統的會話管理通常依賴于服務器端的Session對象,但這種方式在分布式系統中存在一些問題,如Session共享和同步的復雜性。通過將會話數據存儲在Redis中,可以實現跨多個服務器實例的會話共享和管理。在Spring Boot項目中集成Redis,可以方便地利用Redis來實現分布式會話管理,提高系統的可用性和可擴展性。
      3. 計數器與排名
        Redis提供了豐富的數據類型和原子操作,非常適合實現計數器、排行榜等功能。通過集成Redis,Spring Boot項目可以輕松地實現高效的計數器功能,如記錄網站訪問量、用戶點贊數等。同時,Redis的有序集合(sorted sets)數據類型可以用于實現排行榜功能,如用戶積分排名、文章閱讀量排名等。
      4. 消息隊列與發布/訂閱
        Redis支持發布/訂閱模式和列表數據結構,可以實現簡單的消息隊列功能。在Spring Boot項目中集成Redis,可以利用這些特性實現異步通信和消息傳遞。例如,可以將消息發布到Redis頻道中,由訂閱者進行異步處理,實現任務調度、通知推送等功能。
      5. 分布式鎖
        在分布式系統中,實現數據的同步和一致性是一個挑戰。Redis提供了分布式鎖的實現方式,可以在多個進程或服務器之間同步訪問共享資源。在Spring Boot項目中集成Redis,可以利用Redis的分布式鎖功能,確保在并發訪問時數據的一致性和安全性。
        綜上所述,集成Redis到Spring Boot項目中可以帶來諸多好處,包括提高系統性能、簡化會話管理、實現計數器與排名功能、實現消息隊列與發布/訂閱以及分布式鎖等。這些功能有助于提升應用程序的響應速度、可擴展性和安全性,為開發者提供更加靈活和高效的解決方案。

      安裝Redis

      本文是在wsl2上的Ubuntu 22.04上安裝redis。

      1. 輸入命令安裝redis-server

          apt-get install redis-server  
        
      2. 編輯redis.conf

            vim /etc/redis/redis.conf
        

        搜索bind關鍵字,找到如圖配置項,更改為bind 0.0.0.0,不改在WSL上打開不了服務.
        20240316150044
        修改密碼——搜索requirepass關鍵字,找到如下配置,按i進入輸入模式,requirepass空格后面就是要設置的密碼
        20240316150208

      3. 啟動redis-server

          service redis-server start
        

        停止redis-server:

          service redis-server stop
        

        重啟redis-server:

          service redis-server restart
        

      Spring Boot集成Redis的步驟

      添加依賴

      打開項目的build.gradle文件,我們需要添加Redis的依賴。這通常包括Spring Data Redis和連接池(如Lettuce或Jedis)的依賴。

      dependencies {
       implementation 'org.springframework.boot:spring-boot-starter-web'
       compileOnly 'org.projectlombok:lombok'
       annotationProcessor 'org.projectlombok:lombok'
       implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
       runtimeOnly 'mysql:mysql-connector-java:8.0.17'
       implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3'
       implementation 'org.springframework.boot:spring-boot-starter-data-redis'
       implementation 'org.apache.commons:commons-pool2'
      }
      

      配置Redis

      在application.properties或application.yml文件中配置Redis服務器的相關信息,如主機名、端口號、密碼、連接池等。目前java操作redis的客戶端有jedis跟Lettuce。本文使用的是Lettuce,Lettuce的連接是基于Netty的,連接實例(StatefulRedisConnection)可以在多個線程間并發訪問,應為StatefulRedisConnection是線程安全的,所以一個連接實例(StatefulRedisConnection)就可以滿足多線程環境下的并發訪問,當然這個也是可伸縮的設計,一個連接實例不夠的情況也可以按需增加連接實例。

      spring.data.redis.host=localhost
      spring.data.redis.port=6379  
      spring.data.redis.password=your_redis_password
      spring.data.redis.database=1
      spring.data.redis.timeout=3000ms
      spring.data.redis.lettuce.pool.enabled=true
      spring.data.redis.lettuce.pool.max-active=20
      spring.data.redis.lettuce.pool.max-wait=-1
      spring.data.redis.lettuce.pool.max-idle=8
      spring.data.redis.lettuce.pool.min-idle=0
      

      創建配置類

      創建一個配置類,比如RedisConfig.java,并配置RedisTemplate 的key跟value的序列化方式來

      @Configuration
      @EnableCaching
      public class RedisConfig {
          @Bean
          public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
              RedisTemplate<String, Object> template = new RedisTemplate<>();
              template.setConnectionFactory(redisConnectionFactory);
      
              // 使用Jackson2JsonRedisSerializer來序列化和反序列化redis的value值
              ObjectMapper objectMapper = createObjectMapper();
      
              // String的序列化
              StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
              // value序列化方式采用jackson
              Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(objectMapper,Object.class);
              // key采用String的序列化方式
              template.setKeySerializer(stringRedisSerializer);
              // value序列化方式采用jackson
              template.setValueSerializer(jackson2JsonRedisSerializer);
              // Hash的 key也采用String的序列化方式
              template.setHashKeySerializer(stringRedisSerializer);
              // Hash的 value序列化方式采用jackson
              template.setHashValueSerializer(jackson2JsonRedisSerializer);
              template.afterPropertiesSet();
              return template;
          }
      
          private static ObjectMapper createObjectMapper() {
              ObjectMapper objectMapper = new ObjectMapper();
              objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
              objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
              objectMapper.registerModule(new JavaTimeModule());
              objectMapper.registerModule(new SimpleModule().addSerializer(Long.class, ToStringSerializer.instance));
              return objectMapper;
          }
      }
      

      redisTemplate(RedisConnectionFactory redisConnectionFactory)方法配置了RedisTemplate。這里,我們使用了Jackson2JsonRedisSerializer來序列化和反序列化存儲在Redis中的對象值。同時,我們也配置了key和hash key的序列化方式為字符串。ObjectMapper用于配置Jackson的行為,比如是否啟用默認類型信息、時間戳的序列化方式等。

      測試redis

      我們在以前的文章中創建的UserController,里增加一個測試接口。

          @PostMapping("/user")
          public String add() {
              User user=new User();
              user.setName("test");
              user.setAge(18);
              user.setEmail("test@163.com");
              userService.add(user);
              return "保存成功";
          }
      

      在UserService增加一個add方法

      @Service
      public class UserService {
          private final UserMapper userMapper;
          private final UserRepository userRepository;
          private final  RedisTemplate<String, Object> redisTemplate;
          @Autowired
          public UserService(UserMapper userMapper, UserRepository userRepository, RedisTemplate<String, Object> redisTemplate) {
              this.userMapper = userMapper;
              this.userRepository=userRepository;
              this .redisTemplate=redisTemplate;
          }
      
          public List<User> getAllUsers() {
              return userMapper.findAllUsers();
          }
      
          public void add(User user) {
              userRepository.save(user);
              redisTemplate.boundValueOps("user_key").set(user);
      
          }
      
      }
      
      

      測試

      運行你的Spring Boot應用程序,并通過調用UserService的add方法來測試MyBatis的集成效果。你可以通過編寫單元測試或使用Postman或apipost等工具來發送HTTP請求,請求
      http://localhost:8080/user 新增用戶
      通過redis 可視化工具查看user_key值。
      20240316161649

      總結

      當你掌握了基本的集成方法后,你可以進一步學習如何優化Redis的使用,例如使用Redis的發布/訂閱功能、事務支持、Lua腳本等。此外,了解Redis的持久化、主從復制、集群等高級特性也是非常重要的。

      最后,記得查閱Spring Boot和Redis的官方文檔以及相關的社區資源,這些資源將為你提供更深入的學習和實踐機會。

      posted @ 2024-03-16 16:58  代碼匠心  閱讀(476)  評論(0)    收藏  舉報
      主站蜘蛛池模板: av无码精品一区二区三区宅噜噜| 免费久久人人爽人人爽AV| 亚洲国产精品无码一区二区三区| 亚洲午夜福利精品无码不卡| 免费看婬乱a欧美大片| 天美传媒一区二区| 国产在线视频不卡一区二区| 99在线精品国自产拍中文字幕| 精品九九人人做人人爱| 国产a在视频线精品视频下载 | 日韩成人午夜精品久久高潮| 亚洲热妇无码av在线播放| 欧美成人精品三级网站视频| 国精品无码人妻一区二区三区| 亚洲一区二区三区激情视频| 青青青爽在线视频观看| 亚洲尤码不卡av麻豆| 毛片网站在线观看| 东京热人妻无码一区二区av| 国产免费午夜福利在线观看| 国产不卡av一区二区| 日本高清一区二区三| 亚洲国产美国产综合一区| 成人特黄A级毛片免费视频| 野花社区www视频日本| 精品三级在线| 国产国产久热这里只有精品| 国产女人18毛片水真多1| 久久综合综合久久综合| 日韩人妻不卡一区二区三区| 风韵丰满妇啪啪区老老熟女杏吧| 亚洲国产成人久久综合区| 午夜福利国产精品视频| 午夜免费无码福利视频麻豆| 免费人成在线观看网站| 久热这里只有精品6| 成人网站国产在线视频内射视频| 亚洲日韩av在线观看| 国产精品一区在线蜜臀| 美女内射无套日韩免费播放| 亚洲国产成人无码电影|