亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot中怎么整合LettuceRedis

發布時間:2021-08-09 16:49:07 來源:億速云 閱讀:123 作者:Leah 欄目:編程語言

SpringBoot中怎么整合LettuceRedis,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

Redis介紹

Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。相比Memcached它支持存儲的類型相對更多(字符、哈希、集合、有序集合、列表、GEO),同時Redis是線程安全的。2010年3月15日起,Redis的開發工作由VMware主持,2013年5月開始,Redis的開發由Pivotal贊助。

Lettuce

Lettuce 和 Jedis 的都是連接Redis Server的客戶端程序。Jedis在實現上是直連redis server,多線程環境下非線程安全,除非使用連接池,為每個Jedis實例增加物理連接。Lettuce基于Netty的連接實例(StatefulRedisConnection),可以在多個線程間并發訪問,且線程安全,滿足多線程環境下的并發訪問,同時它是可伸縮的設計,一個連接實例不夠的情況也可以按需增加連接實例。

導入依賴

在 pom.xml 中spring-boot-starter-data-redis的依賴,Spring Boot2.x 后底層不在是Jedis如果做版本升級的朋友需要注意下

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId></dependency><dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-pool2</artifactId></dependency><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-test</artifactId>  <scope>test</scope></dependency>

屬性配置

在 application.properties 文件中配置如下內容,由于Spring Boot2.x 的改動,連接池相關配置需要通過spring.redis.lettuce.pool或者 spring.redis.jedis.pool 進行配置了

spring.redis.host=localhostspring.redis.password=battcn# 連接超時時間(毫秒)spring.redis.timeout=10000# Redis默認情況下有16個分片,這里配置具體使用的分片,默認是0spring.redis.database=0# 連接池最大連接數(使用負值表示沒有限制) 默認 8spring.redis.lettuce.pool.max-active=8# 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1spring.redis.lettuce.pool.max-wait=-1# 連接池中的最大空閑連接 默認 8spring.redis.lettuce.pool.max-idle=8# 連接池中的最小空閑連接 默認 0spring.redis.lettuce.pool.min-idle=0

具體編碼

Spring Boot對Redis的支持已經非常完善了,良好的序列化以及豐富的API足夠應對日常開發

實體類

創建一個User類

package com.battcn.entity;import java.io.Serializable;/** * @author Levin * @since 2018/5/10 0007 */public class User implements Serializable {  private static final long serialVersionUID = 8655851615465363473L;  private Long id;  private String username;  private String password;  // TODO 省略get set}

自定義Template

默認情況下的模板只能支持RedisTemplate<String, String>,也就是只能存入字符串,這在開發中是不友好的,所以自定義模板是很有必要的,當自定義了模板又想使用String存儲這時候就可以使用StringRedisTemplate的方式,它們并不沖突…

package com.battcn.config;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;import java.io.Serializable;/** * TODO 修改database * * @author Levin * @since 2018/5/10 0022 */@Configuration@AutoConfigureAfter(RedisAutoConfiguration.class)public class RedisCacheAutoConfiguration {  @Bean  public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) {    RedisTemplate<String, Serializable> template = new RedisTemplate<>();    template.setKeySerializer(new StringRedisSerializer());    template.setValueSerializer(new GenericJackson2JsonRedisSerializer());    template.setConnectionFactory(redisConnectionFactory);    return template;  }}

測試

完成準備事項后,編寫一個junit測試類來檢驗代碼的正確性,有很多人質疑過Redis線程安全性,故下面也提供了響應的測試案例,如有疑問歡迎指正

package com.battcn;import com.battcn.entity.User;import org.junit.Test;import org.junit.runner.RunWith;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.test.context.junit4.SpringRunner;import java.io.Serializable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.stream.IntStream;/** * @author Levin * @since 2018/5/10 0010 */@RunWith(SpringRunner.class)@SpringBootTestpublic class Chapter8ApplicationTest {  private static final Logger log = LoggerFactory.getLogger(Chapter8ApplicationTest.class);  @Autowired  private StringRedisTemplate stringRedisTemplate;  @Autowired  private RedisTemplate<String, Serializable> redisCacheTemplate;  @Test  public void get() {    // TODO 測試線程安全    ExecutorService executorService = Executors.newFixedThreadPool(1000);    IntStream.range(0, 1000).forEach(i ->        executorService.execute(() -> stringRedisTemplate.opsForValue().increment("kk", 1))    );    stringRedisTemplate.opsForValue().set("k1", "v1");    final String k1 = stringRedisTemplate.opsForValue().get("k1");    log.info("[字符緩存結果] - [{}]", k1);    // TODO 以下只演示整合,具體Redis命令可以參考官方文檔,Spring Data Redis 只是改了個名字而已,Redis支持的命令它都支持    String key = "battcn:user:1";    redisCacheTemplate.opsForValue().set(key, new User(1L, "u1", "pa"));    // TODO 對應 String(字符串)    final User user = (User) redisCacheTemplate.opsForValue().get(key);    log.info("[對象緩存結果] - [{}]", user);  }}

其它類型

下列的就是Redis其它類型所對應的操作方式

opsForValue: 對應 String(字符串)  opsForZSet: 對應 ZSet(有序集合)  opsForHash: 對應 Hash(哈希)  opsForList: 對應 List(列表)  opsForSet: 對應 Set(集合)  opsForGeo: 對應 GEO(地理位置)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邛崃市| 祁东县| 辽中县| 宜兰市| 吴旗县| 尼玛县| 巴林左旗| 永康市| 施秉县| 华容县| 腾冲县| 三穗县| 普格县| 白山市| 荔波县| 德安县| 城固县| 安新县| 黎川县| 阿拉善盟| 高碑店市| 黑水县| 苏尼特右旗| 大邑县| 田林县| 江安县| 巴彦淖尔市| 北流市| 神农架林区| 泰宁县| 望江县| 和林格尔县| 玉田县| 台中县| 德江县| 平南县| 汤原县| 冀州市| 永登县| 贵德县| 界首市|