国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot 使用 Redis

這篇具有很好參考價值的文章主要介紹了Spring Boot 使用 Redis。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1,Spring 是如何集成Redis的?

首先我們要使用jar包

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-redis</artifactId>

 </dependency>
 <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
 </dependency>

2,我們使用的時候需要用到高級封裝

Spring Boot 使用 Redis,spring boot,redis,后端

2,配置Redis

# Redis服務器地址
spring.redis.host=10.1.30.222
# Redis數(shù)據(jù)庫索引(默認為0)
spring.redis.database=0 
# Redis服務器連接端口
spring.redis.port=6379 
# Redis服務器連接密碼(默認為空)
#spring.redis.password=
## 連接超時時間(毫秒)
spring.redis.timeout=30000

# 連接池最大連接數(shù)(使用負值表示沒有限制) 默認 8
spring.redis.lettuce.pool.max-active=8

# 連接池中的最大空閑連接 默認 8
spring.redis.lettuce.pool.max-idle=8
# 連接池中的最小空閑連接 默認 0
spring.redis.lettuce.pool.min-idle=1

#連接池中最大空閑等待時間,3s沒有活干的時候直接驅逐該鏈接
spring.redis.lettuce.pool.min-evictable-idle-time-millis = 3000


# 連接池最大阻塞等待時間(使用負值表示沒有限制) 默認 -1
spring.redis.lettuce.pool.max-wait=-1

StringRedisTemplate

String

public class StringDemo {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private final String key = "zhengzhou";

    public void test() {

        stringRedisTemplate.opsForValue().set(key, "我的家鄉(xiāng)", 30, TimeUnit.SECONDS);
        String value = stringRedisTemplate.opsForValue().get(key);
        System.out.println(value);
    }
}

Java

Hash

@Component
public class HashDemo {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    private  final  String key ="zhouxingxing";
    public void  test(){
        stringRedisTemplate.opsForHash().put(key,"20220325","鄭州");
        stringRedisTemplate.opsForHash().put(key,"20220326","洛陽");

        List<Object> values = stringRedisTemplate.opsForHash().values(key);

        for (Object value:values){
            System.out.println(value);
        }

    }
}

Java

List

@Component
public class ListDemo {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    private  final  String key ="onewayroad";
    void  test(){

        stringRedisTemplate.opsForList().leftPush(key,"周星星");
        stringRedisTemplate.opsForList().leftPush(key,"張敏");
        stringRedisTemplate.opsForList().leftPush(key,"李大錘");
        String value = stringRedisTemplate.opsForList().rightPop(key);
        System.out.println(value);


    }
}
    @Test
    void test6() {
     // 如果一些原生命令,spring 沒有給我們封裝,redisTemplate.execute(new RedisCallback)
    while (true){
        System.out.println("開始一輪監(jiān)聽");
        List<byte[]> rawResults = redisTemplateProduct.execute(new RedisCallback<List<byte[]>>() {
            @Override
            public List<byte[]> doInRedis(RedisConnection connection) throws DataAccessException {
                return connection.bRPop(5,"product.hot".getBytes());
            }
        });
        if(ObjUtil.isNotEmpty(rawResults)){
            byte[] rawKey = rawResults.get(0);
            byte[] rawValue = rawResults.get(1);
            Product product = (Product)redisTemplateProduct.getValueSerializer().deserialize(rawValue);
            System.out.println(product);
        }
    }


Java

Set

@Component
public class SetDemo {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    private final  String zhouxingxing ="zhouxingxing";
    private  final  String zhangmin = "zhangming";

    public void  test(){
        //添加周星星同學感興趣的科目
        stringRedisTemplate.opsForSet().add(zhouxingxing,"語文");
        stringRedisTemplate.opsForSet().add(zhouxingxing,"數(shù)學");
        stringRedisTemplate.opsForSet().add(zhouxingxing,"數(shù)學");
        //添加張敏同學感興趣的科目
        stringRedisTemplate.opsForSet().add(zhangmin,"數(shù)學");
        stringRedisTemplate.opsForSet().add(zhangmin,"英語");

        //獲取兩位同學共同感興趣的科目
        Set<String> values = stringRedisTemplate.opsForSet().intersect(zhouxingxing, zhangmin);

        System.out.println("周星星和張敏共同感興趣的科目為:");

        for(String value : values){
            System.out.println(value);
        }
        
    }
}

Java

ZSet

@Component
public class ZSetDemo {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    private final  String key ="zhouxingxing";
    public void  test(){
        //添加周星星同學成績
        stringRedisTemplate.opsForZSet().add(key,"語文",98);
        stringRedisTemplate.opsForZSet().add(key,"數(shù)學",87);
        stringRedisTemplate.opsForZSet().add(key,"英語",75);
        //獲取分數(shù)最高的成績
        ZSetOperations.TypedTuple<String> values = stringRedisTemplate.opsForZSet().popMax(key);
        //打印值
        System.out.println("周星星最好成績科目是:"+values.getValue());
        System.out.println("周星星最好成績:"+values.getScore());
        
    }
}

Java

BitMap

@Component
public class BitMapDemo {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    private final  String key ="sign#2022#zhouxingxing";
    public void test(){
       //設置簽到
        stringRedisTemplate.opsForValue().setBit(key,2,true);
        stringRedisTemplate.opsForValue().setBit(key,85,true);
        //獲取周星星同學的簽到天數(shù)
        RedisCallback<Long> callback = connection -> { return  connection.bitCount(key.getBytes(),0,365);};
        Long count = stringRedisTemplate.execute(callback);
        //打印周星星2022年簽到天數(shù)
        System.out.println("周星星2022年一共簽到天數(shù):"+count);
    }
}

Java

3.RedisTemplate

3.1泛型約束的使用

@Component
public class RedisTemplateDemo {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate<String, String> redisTemplate_string_string;

    @Resource
    private RedisTemplate<String, User> redisTemplate;

    @Resource(name="redisTemplate")
    private ValueOperations<String,User> valueOperations;

    private final String key = "useris#01";

    public void test() {
        User user = User.builder().id(1).name("李四").build();
        redisTemplate.opsForValue().set(key,user );
        User value = redisTemplate.opsForValue().get(key);
        valueOperations.set(key,user );
        User value2 = valueOperations.get(key);
        System.out.println(value);

    }
}

4,亂碼的問題

JdkSerializationRedisSerializer  serializer = new JdkSerializationRedisSerializer();
        byte[] serialize = serializer.serialize("user#01");
        System.out.println(new String(serialize));

自定義序列化工具

@Configuration
public class RedisConfig {
    

 @Bean //主動注冊了一個名字叫redisTemplate 的bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
    {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

        Jackson2JsonRedisSerializer jackson = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper  mapper = new ObjectMapper();

        // 啟用默認類型推理,將類型信息作為屬性寫入JSON
        // 就是把對象的全類名寫入json
        mapper.activateDefaultTyping( mapper.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);

        jackson.setObjectMapper(mapper);
        template.setKeySerializer(StringRedisSerializer.UTF_8);
        template.setValueSerializer(jackson);
        template.setHashKeySerializer(StringRedisSerializer.UTF_8);
        template.setHashValueSerializer(jackson);
        return template;
    }


}

為什么要自定話應該序列化工具,因為他自己提供的不是很好,所以我們要自己定義一個,這樣的話可以把java對象轉化成json和字節(jié)碼存入Redis 里,反序列化就是把json和字節(jié)碼轉化為java對象,泛型指定為?Object.class?表示可以處理任何類型的對象。

最后返回配置好的?RedisTemplate?實例,這樣在整個Spring Boot應用中,當需要使用RedisTemplate進行操作時,將自動使用這個經過JSON序列化配置的模板。

詳細的介紹:

  1. @Configuration?注解表明這是一個配置類,Spring IoC容器將會讀取該類中的bean定義。

  2. @Bean?注解的方法表示該方法會返回一個對象,該對象會被注冊為Spring容器中的bean。在這個例子中,方法名為?redisTemplate,所以生成的bean的名字也是 "redisTemplate"。

  3. 方法體中首先創(chuàng)建了一個?RedisTemplate<Object, Object>?實例,并將其連接工廠設置為傳入的?RedisConnectionFactory,這是連接Redis的基礎配置。

  4. 創(chuàng)建了?Jackson2JsonRedisSerializer?實例,用于將Java對象序列化為JSON字符串,反序列化時則將JSON字符串轉回為Java對象。泛型指定為?Object.class?表示可以處理任何類型的對象。

  5. 初始化?ObjectMapper,它是Jackson庫中用于處理JSON的核心類。這里啟用了默認類型推理(activateDefaultTyping),這樣在序列化時,即使目標類沒有顯式地聲明類型信息,也能根據(jù)實際運行時類型推斷并在JSON中包含類型信息,這對于處理多態(tài)類型的場景非常有用。

  6. 將初始化好的?ObjectMapper?設置給?Jackson2JsonRedisSerializer。

  7. 配置RedisTemplate的序列化策略:

    • template.setKeySerializer(StringRedisSerializer.UTF_8);?設置鍵(key)的序列化器為?StringRedisSerializer,以UTF-8格式進行字符串序列化。
    • template.setValueSerializer(jackson);?設置值(value)的序列化器為剛才創(chuàng)建的?Jackson2JsonRedisSerializer,即所有值都將轉化為JSON字符串存儲。
    • template.setHashKeySerializer(StringRedisSerializer.UTF_8);?設置哈希表鍵(hash key)的序列化器也為?StringRedisSerializer,同樣以UTF-8格式進行字符串序列化。
    • template.setHashValueSerializer(jackson);?設置哈希表值(hash value)的序列化器為?Jackson2JsonRedisSerializer,意味著哈希表中的每個值也將被轉化為JSON字符串存儲。

最后,返回配置好的?RedisTemplate?實例,這樣在整個Spring Boot應用中,當需要使用RedisTemplate進行操作時,將自動使用這個經過JSON序列化配置的模板。文章來源地址http://www.zghlxwxcb.cn/news/detail-844226.html

到了這里,關于Spring Boot 使用 Redis的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring Boot 中的 Redis 數(shù)據(jù)操作配置和使用

    Spring Boot 中的 Redis 數(shù)據(jù)操作配置和使用

    Redis(Remote Dictionary Server)是一種高性能的開源內存數(shù)據(jù)庫,用于緩存、消息隊列、會話管理和數(shù)據(jù)存儲。在Spring Boot應用程序中,Redis被廣泛用于各種用例,包括緩存、持久性存儲和分布式鎖。本文將探討如何在Spring Boot中配置和使用Redis,包括數(shù)據(jù)操作和常見用例。 要在S

    2024年02月07日
    瀏覽(28)
  • 如何在Spring Boot中使用Redis連接池?

    ??在Spring Boot中使用Redis連接池,你通常不需要做太多額外配置,因為Spring Boot Data Redis默認使用了一個連接池,即LettuceConnectionFactory或JedisConnectionFactory,它們內部已經實現(xiàn)了連接池功能。 ??下面是一些步驟和配置,以確保你在Spring Boot應用中正確使用了Redis連接池: ??

    2024年03月11日
    瀏覽(27)
  • 使用Spring Boot實現(xiàn)Redis鍵過期回調功能

    使用Spring Boot實現(xiàn)Redis鍵過期回調功能

    當使用Redis作為緩存或數(shù)據(jù)存儲的時候,有時候需要在鍵過期時執(zhí)行一些特定的操作,比如清除相關數(shù)據(jù)或發(fā)送通知。在Spring Boot中,可以通過實現(xiàn) RedisMessageListener 接口來實現(xiàn)Redis鍵過期回調功能。下面是一個實現(xiàn)Redis鍵過期回調功能的Spring Boot應用的示例: 步驟一:引入依賴

    2024年02月16日
    瀏覽(22)
  • 使用Spring Boot操作Redis、ES、MongoDB舉例

    在Spring Boot應用程序中操作Redis通常涉及到使用Spring Data Redis,這是一個提供簡便方法來操作Redis的庫。以下是一個基本示例,演示如何在Spring Boot應用程序中集成和使用Redis: 步驟 1: 添加依賴項 首先,在你的 pom.xml 文件中添加Spring Data Redis的依賴項。 步驟 2: 配置Redis 在你的

    2024年01月25日
    瀏覽(21)
  • Spring Boot 整合 Redis 全面教程:從配置到使用

    Redis 是一種高性能的鍵值存儲數(shù)據(jù)庫,而 Spring Boot 是一個簡化了開發(fā)過程的 Java 框架。將兩者結合,可以輕松地在 Spring Boot 項目中使用 Redis 來實現(xiàn)數(shù)據(jù)緩存、會話管理和分布式鎖等功能。 在 pom.xml 文件中添加 Redis 相關依賴 在 application.properties 或 application.yml 配置文件中添

    2024年02月13日
    瀏覽(23)
  • 在Spring Boot中使用Redis 5的Stream

    Redis是一個開源的高性能鍵值對存儲系統(tǒng),而Redis 5引入了新的數(shù)據(jù)結構——Stream(流)。Stream可以用于高效地保存和處理事件流數(shù)據(jù)。在本文中,我們將學習如何在Spring Boot應用程序中使用Redis 5的Stream功能。 步驟1:配置Redis連接 首先,確保您的Spring Boot應用程序已經添加了

    2024年02月09日
    瀏覽(22)
  • Spring Boot 中的 Redis 的數(shù)據(jù)操作配置和使用

    Spring Boot 中的 Redis 的數(shù)據(jù)操作配置和使用

    Redis 是一種高性能的 NoSQL 數(shù)據(jù)庫,它支持多種數(shù)據(jù)結構,包括字符串、哈希、列表、集合和有序集合。Redis 還提供了豐富的命令,可以對數(shù)據(jù)進行快速的 CRUD 操作。Spring Boot 是一個基于 Spring 的快速開發(fā)框架,它提供了對 Redis 的集成支持。在本文中,我們將介紹如何在 Spri

    2024年02月11日
    瀏覽(21)
  • Spring Boot 整合 Redis,使用 RedisTemplate 客戶端

    Spring Boot 整合 Redis,使用 RedisTemplate 客戶端

    1.1.1 添加依賴 redis 的依賴: 1.1.2 yml 配置文件 1.1.3 Config 配置文件 1.1.4 使用示例 注入 RedisTemplate,即可操作 Redis,簡單示例如下: 1.2.1 RedisTemplate 簡介 RedisTemplate 是 Spring Data Redis 項目的一部分,旨在簡化在Java應用程序中使用 Redis 的過程。它提供了一組簡單的方法,可以在

    2024年02月09日
    瀏覽(28)
  • 在Spring Boot微服務使用RedisTemplate操作Redis集群

    記錄 :442 場景 :在Spring Boot微服務使用RedisTemplate操作Redis集群的緩存和隊列等數(shù)據(jù)類型。 版本 :JDK 1.8,Spring?Boot 2.6.3,redis-6.2.5。 1.微服務中 配置Redis信息 1.1在pom.xml添加依賴 pom.xml文件: 解析:spring-boot-starter-data-redis和spring-boot版本保持一致。 1.2在application.yml中配置Redis集群

    2024年02月12日
    瀏覽(23)
  • 輕松打卡:使用Spring Boot和Redis Bitmap構建高效簽到系統(tǒng)【redis實戰(zhàn) 四】

    輕松打卡:使用Spring Boot和Redis Bitmap構建高效簽到系統(tǒng)【redis實戰(zhàn) 四】

    歡迎來到我的博客,代碼的世界里,每一行都是一個故事 Redis List:打造高效消息隊列的秘密武器【redis實戰(zhàn) 一】 Redis Streams在Spring Boot中的應用:構建可靠的消息隊列解決方案【redis實戰(zhàn) 二】 Spring Boot和Redis Geo實現(xiàn)附近的人【redis實戰(zhàn) 三】 在數(shù)字化時代,簽到系統(tǒng)已成為許多

    2024年01月23日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包