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

Spring?Boot中使用Redis實戰(zhàn)案例

 更新時間:2023年04月18日 10:47:20   作者:_BugMan  
redis作為一個高性能的內(nèi)存數(shù)據(jù)庫,如果不會用就太落伍了,之前在 node.js中用過 redis,本篇記錄如何將 redis 集成到 spring boot 中,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot中使用Redis的相關(guān)資料,需要的朋友可以參考下

1.依賴

maven依賴如下,需要說明的是,spring-boot-starter-data-redis里默認是使用lettuce作為redis客戶端的驅(qū)動,但是lettuce其實用的比較少,我們常用的還是jedis作為客戶端的驅(qū)動,所以這里排除掉lettuce,引入jedis:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
</dependency>

2.依賴關(guān)系

spring data redis中依賴的關(guān)系:

這個依賴關(guān)系想表達的是,Spring 是通過 RedisConnection操作Redis的,RedisConnection 則對原生的 Jedis 行封裝。要獲取RedisConnection接口對象是通過RedisConnectionFactory 生成的 。

3.配置

配置文件進行配置:

# Redis 連接配置
# 單機 Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
# 連接池配置
spring.redis.jedis.pool.max-idle=30
spring.redis.jedis.pool.max-total=50
spring.redis.jedis.pool.max-wait=2000ms

代碼進行配置:

@Configuration
public class RedisConfig {
    private RedisConnectionFactory connectionFactory = null;
 
    @Bean
    public RedisConnectionFactory initRedisConnectionFactory(){
        if(connectionFactory!=null){
            return connectionFactory;
        }
        JedisPoolConfig poolConfig =new JedisPoolConfig();
        //最大空閑數(shù)
        poolConfig.setMaxIdle(30);
        //最大連接數(shù)
        poolConfig.setMaxTotal(50);
        //最大等待毫秒數(shù)
        poolConfig.setMaxWaitMillis(2000);
        //創(chuàng)建Jedis連接工廠
        JedisConnectionFactory connectionFactory=new JedisConnectionFactory(poolConfig);
        //獲取單機的redis配置,如果是集群的話用集群配置類
        RedisStandaloneConfiguration rscfg=connectionFactory.getStandaloneConfiguration();
        connectionFactory.setHostName("127.0.0.1");
        connectionFactory.setPort(6379);
        return connectionFactory;
    }
}

4.RedisTemplate

這里要說明的是如果是直接使用RedisConnection來操作redis就需要我們手動去找RedisConnectionFactory拿RedisConnection,并且需要每次手動關(guān)閉RedisConnection。所以Spring Data Redis里面提供了RedisTemplate來方便操作,其封裝自jedis,屏蔽了資源獲取和釋放的步驟。

使用RedisTemplate的時候要注意的核心是它的序列化器,RedisTemplate有多種序列化器,不同的序列化器在鍵值寫入、讀出redis的過程中使用的序列化方式會不同,序列化出來的結(jié)果也會不同。比如處理字符就需要用字符串專用的序列化器、處理對象需要使用對象專用的序列化器。

目前有的序列化器如下:

StringRedisSerializer:

StringRedisSerializer 是 RedisTemplate 默認使用的 Key 和 Value 的序列化器,它將字符串序列化為字節(jié)數(shù)組,使用 UTF-8 編碼。由于 Redis 中 Key 和 Value 都是字符串,因此默認的 StringRedisSerializer 序列化器已經(jīng)可以滿足大部分情況的需要。

Jackson2JsonRedisSerializer:

Jackson2JsonRedisSerializer 是一個基于 Jackson 的 Redis Key 和 Value 的序列化器,它可以將對象序列化為 JSON 格式的字符串,并存儲到 Redis 中。使用 Jackson2JsonRedisSerializer 序列化器需要添加 Jackson 的依賴,可以將對象轉(zhuǎn)換為 JSON 格式的字符串,也可以將 JSON 格式的字符串轉(zhuǎn)換為對象。

JdkSerializationRedisSerializer:

JdkSerializationRedisSerializer 是一種基于 Java 自帶的序列化方式的序列化器,它可以將對象序列化為字節(jié)數(shù)組進行存儲。雖然 JdkSerializationRedisSerializer 簡單易用,但是它的效率比較低,序列化后的字節(jié)數(shù)組也比較大,不適合存儲大量的數(shù)據(jù)。

GenericJackson2JsonRedisSerializer:

GenericJackson2JsonRedisSerializer 是一個支持泛型的 Jackson2JsonRedisSerializer,它可以序列化任意類型的對象,并將對象序列化為 JSON 格式的字符串。它在序列化和反序列化時都需要指定目標類型。

OxmSerializer:

OxmSerializer 是一種基于 Spring 的 O/X 映射框架的序列化器,它支持將對象序列化為 XML 格式的字符串。雖然 OxmSerializer 靈活性較高,但是序列化和反序列化的性能比較低,不適合存儲大量的數(shù)據(jù)。

總之,在選擇序列化器時需要根據(jù)實際情況進行選擇,根據(jù)數(shù)據(jù)類型和性能要求選擇合適的序列化器。

使用的時候直接set進去即可,set的時候給了很多生效粒度選擇,是對所有redis類型的數(shù)據(jù)結(jié)構(gòu)都生效,還是對某一類redis的數(shù)據(jù)結(jié)構(gòu)類型生效:

比如我想使用String序列化器,在全局都生效:

@Bean
public RedisTemplate<Object,Object> initRedisTemplate(){
  RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
  redisTemplate.setDefaultSerializer(new StringRedisSerializer());
  return redisTemplate;
}

5.基礎(chǔ)操作

以下是使用RedisTemplate操作redis基本數(shù)據(jù)類型的代碼示例:

要注意的是@Bean定義RedisTemplate的時候泛型要和使用時的泛型對齊。

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class RedisService {
 
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
 
    public void setString(String key, String value) {
        stringRedisTemplate.opsForValue().set(key, value);
    }
 
    public String getString(String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }
 
    public void setHash(String key, String hashKey, Object value) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        hashOps.put(key, hashKey, value);
    }
 
    public Object getHash(String key, String hashKey) {
        HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
        return hashOps.get(key, hashKey);
    }
 
    public void setList(String key, Object value) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        listOps.rightPush(key, value);
    }
 
    public Object getList(String key, long index) {
        ListOperations<String, Object> listOps = redisTemplate.opsForList();
        return listOps.index(key, index);
    }
 
    public void setSet(String key, Object value) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        setOps.add(key, value);
    }
 
    public Object getSet(String key) {
        SetOperations<String, Object> setOps = redisTemplate.opsForSet();
        return setOps.members(key);
    }
 
    public void setZSet(String key, Object value, double score) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        zsetOps.add(key, value, score);
    }
 
    public Object getZSet(String key, long start, long end) {
        ZSetOperations<String, Object> zsetOps = redisTemplate.opsForZSet();
        return zsetOps.range(key, start, end);
    }
 
}

6.事務(wù)

以下是使用事務(wù)的代碼示例:

@Autowired
private RedisTemplate<String, String> redisTemplate;
 
public void transactionalOperation() {
    // 開啟 Redis 事務(wù)
    redisTemplate.multi();
 
    try {
        // 執(zhí)行多個 Redis 命令
        redisTemplate.opsForValue().set("key1", "value1");
        redisTemplate.opsForValue().set("key2", "value2");
 
        // 提交事務(wù)
        redisTemplate.exec();
    } catch (Exception e) {
        // 回滾事務(wù)
        redisTemplate.discard();
    }
}

總結(jié)

到此這篇關(guān)于Spring Boot中使用Redis的文章就介紹到這了,更多相關(guān)Spring Boot使用Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Java串行化接口的用法和原理

    詳解Java串行化接口的用法和原理

    在Java開發(fā)中,我們經(jīng)常需要將對象進行序列化和反序列化,以便在網(wǎng)絡(luò)傳輸或存儲到持久化介質(zhì)中,Java提供了一種機制,即通過實現(xiàn)Serializable接口來實現(xiàn)對象的串行化,本文將詳細介紹Java串行化接口的用法和原理,以及一些相關(guān)的注意事項,需要的朋友可以參考下
    2023-11-11
  • 初探Java內(nèi)部類的使用

    初探Java內(nèi)部類的使用

    Java內(nèi)部類一般可以分為以下三種:成員內(nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。這篇文章主要帶大家初探一下Java內(nèi)部類的使用,感興趣的可以了解一下
    2022-09-09
  • SpringAOP+RabbitMQ+WebSocket實戰(zhàn)詳解

    SpringAOP+RabbitMQ+WebSocket實戰(zhàn)詳解

    這篇文章主要介紹了SpringAOP+RabbitMQ+WebSocket實戰(zhàn)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • JDK 7U15在 Windows x86平臺下的安裝方法

    JDK 7U15在 Windows x86平臺下的安裝方法

    本文給大家分享的是如何在windows平臺下安裝JDK最新版的方法,十分的簡單全面,有需要的小伙伴可以參考下
    2016-05-05
  • Java之理解多態(tài)詳解

    Java之理解多態(tài)詳解

    大家好,本篇文章主要講的是Java之理解多態(tài)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • java快速排序和選擇排序?qū)崿F(xiàn)實例解析

    java快速排序和選擇排序?qū)崿F(xiàn)實例解析

    這篇文章主要為大家介紹了java快速排序和選擇排序?qū)崿F(xiàn)實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • java后端解決跨域的幾種問題解決

    java后端解決跨域的幾種問題解決

    這篇文章主要介紹了java后端解決跨域的幾種問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • java進階之了解SpringBoot的配置原理

    java進階之了解SpringBoot的配置原理

    今天帶大家了解SpringBoot的相關(guān)知識,文中對SpringBoot的配置原理作了非常詳細的圖文示例及介紹,需要的朋友可以參考下
    2021-06-06
  • 新版本IntelliJ IDEA 構(gòu)建maven,并用Maven創(chuàng)建一個web項目(圖文教程)

    新版本IntelliJ IDEA 構(gòu)建maven,并用Maven創(chuàng)建一個web項目(圖文教程)

    這篇文章主要介紹了新版本IntelliJ IDEA 構(gòu)建maven,并用Maven創(chuàng)建一個web項目的圖文教程,需要的朋友可以參考下
    2018-01-01
  • spring mvc @PathVariable綁定URI模板變量值方式

    spring mvc @PathVariable綁定URI模板變量值方式

    這篇文章主要介紹了spring mvc @PathVariable綁定URI模板變量值方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論