中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

凤冈县| 招远市| 西林县| 怀来县| 荣成市| 乐清市| 商都县| 乌苏市| 云南省| 余江县| 漠河县| 波密县| 建瓯市| 科技| 内黄县| 涞水县| 浏阳市| 盐山县| 苏尼特右旗| 中山市| 运城市| 平邑县| 贵阳市| 伊宁市| 肇州县| 包头市| 井陉县| 出国| 台湾省| 彩票| 开远市| 高邑县| 葵青区| 岑巩县| 尼玛县| 莱阳市| 武清区| 甘谷县| 津市市| 二连浩特市| 淳化县|