源代碼如何做網(wǎng)站百度移動(dòng)端點(diǎn)贊排名軟件
?
??個(gè)人主頁:? ? ?蒾酒
🔥系列專欄:《spring boot實(shí)戰(zhàn)》
🌊山高路遠(yuǎn),行路漫漫,終有歸途。
目錄
前置條件
1.導(dǎo)依賴
2.配置連接信息以及連接池參數(shù)
3.配置序列化方式
4.編寫測試
前置條件
已經(jīng)初始化好一個(gè)spring boot項(xiàng)目且版本為3X,項(xiàng)目可正常啟動(dòng)。
作者版本為3.2.2
初始化教程:
新版idea(2023)創(chuàng)建spring boot3項(xiàng)目-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135785412?spm=1001.2014.3001.5501
1.導(dǎo)依賴
pom.xml:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
如果還沒安裝redis可以參照這篇:
阿里云ECS使用docke搭建redis服務(wù)-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135707725?spm=1001.2014.3001.5502
2.配置連接信息以及連接池參數(shù)
application.yml:
server:port: 8080
spring:data:redis: # Redis連接配置host: localhost # Redis主機(jī)地址port: 6379 # Redis端口號(hào)password: 123456 # 訪問Redis所需密碼database: 0 # 使用的數(shù)據(jù)庫編號(hào)lettuce: #Lettuce客戶端配置pool: # 連接池配置max-active: 8 # 最大活躍連接數(shù)max-wait: -1 # 最大等待時(shí)間(-1表示無限等待)max-idle: 8 # 最大空閑連接數(shù)min-idle: 0 # 最小空閑連接數(shù)
修改為你的連接信息即可。
這里要說的是:
Lettuce和Jedis兩者都是Java連接Redis的客戶端
選擇使用Lettuce而不是Jedis的原因如下:
線程安全性:
- Lettuce 是基于 Netty 構(gòu)建的,它使用異步和事件驅(qū)動(dòng)的方式處理連接。因此,它可以在多個(gè)線程之間共享一個(gè)連接而不需要額外的同步,因此在高并發(fā)環(huán)境下更高效。
- Jedis 是基于阻塞 I/O 的,并且不是線程安全的,如果在多個(gè)線程中共享同一個(gè) Jedis 實(shí)例,需要使用連接池進(jìn)行同步管理,這可能引入額外的復(fù)雜性。
連接方式:
- Lettuce 支持基于 Reactive Streams 的響應(yīng)式編程模型,能夠更好地與 Spring Reactor、Project Reactor 等框架集成,提供異步和非阻塞的操作。
- Jedis 是同步的,并且在執(zhí)行某些操作時(shí)會(huì)阻塞線程,這可能會(huì)影響應(yīng)用程序的性能和響應(yīng)性。
性能和擴(kuò)展性:
- Lettuce 的設(shè)計(jì)目標(biāo)是高性能和擴(kuò)展性,它可以更好地利用 Redis 4.0 中引入的一些新特性(如 Redis Sentinel 和 Redis Cluster)。
- Jedis 的設(shè)計(jì)目標(biāo)更偏向于簡單易用,對(duì)于一些特殊的 Redis 集群模式可能支持不夠完善。
維護(hù)和更新:
- Lettuce 是一個(gè)活躍的項(xiàng)目,并且持續(xù)地得到更新和改進(jìn)。
- Jedis 在某些方面已經(jīng)相對(duì)穩(wěn)定,并且在一段時(shí)間內(nèi)沒有大的更新。
3.配置序列化方式
config目錄下新建redis配置類
配置類代碼如下:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;/*** @author mijiupro*/
@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(connectionFactory);// 設(shè)置key和value的序列化方式redisTemplate.setKeySerializer(new StringRedisSerializer()); // 設(shè)置key的序列化器為StringRedisSerializerredisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); // 設(shè)置value的序列化器為JdkSerializationRedisSerializerredisTemplate.setHashKeySerializer(new StringRedisSerializer()); // 設(shè)置hash key的序列化器為StringRedisSerializerredisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer()); // 設(shè)置hash value的序列化器為JdkSerializationRedisSerializerredisTemplate.afterPropertiesSet(); // 初始化RedisTemplatereturn redisTemplate; // 返回配置好的RedisTemplate}
}
4.編寫測試
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;import java.util.concurrent.TimeUnit;@SpringBootTest
public class RedisTest {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Test//測試redisvoid contextLoads2() {//添加緩存鍵值對(duì)name:mijiu并設(shè)置過期時(shí)間為1小時(shí)stringRedisTemplate.opsForValue().set("name","mijiu",10, TimeUnit.SECONDS);System.out.println(stringRedisTemplate.opsForValue().get("name"));}
}
運(yùn)行測試
測試成功,整合完畢!