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

【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis

這篇具有很好參考價(jià)值的文章主要介紹了【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis,云原生進(jìn)階-PaaS專欄,云原生,redis,paas,中間件,架構(gòu)

1 Java 使用 Redis

1.1 方案簡(jiǎn)述

????????redis的java客戶端很多,官方推薦的有三種:

  1. Jedis
  2. Lettuce
  3. Redisson
  4. Spring 對(duì)Redis 客戶端進(jìn)行了整合,提供了Spring Date Redis ,在Spring Boot項(xiàng)目中還提供了對(duì)應(yīng)的Starter,即spring-boot-starter-data-redis。

1.2 使用Jedis連接到 redis 服務(wù)

????????使用Jedis操作Redis的步驟:

1.獲取鏈接;

2.執(zhí)行操作;

3.關(guān)閉連接;

1.2.1 實(shí)例

import redis.clients.jedis.Jedis;
 
public class RedisJava {
    public static void main(String[] args) {
        //連接本地的 Redis 服務(wù)
        Jedis jedis = new Jedis("localhost");

        // 如果 Redis 服務(wù)設(shè)置了密碼,需要下面這行,沒有就不需要
        // jedis.auth("123456"); 
        System.out.println("連接成功");

        //查看服務(wù)是否運(yùn)行
        System.out.println("服務(wù)正在運(yùn)行: "+jedis.ping());
    }
}

????????編譯以上 Java 程序,確保驅(qū)動(dòng)包的路徑是正確的。

連接成功

服務(wù)正在運(yùn)行: PONG

1.2.2 Redis Java String(字符串) 實(shí)例

import redis.clients.jedis.Jedis;
 
public class RedisStringJava {
    public static void main(String[] args) {
        //連接本地的 Redis 服務(wù)
        Jedis jedis = new Jedis("localhost");
        System.out.println("連接成功");

        //設(shè)置 redis 字符串?dāng)?shù)據(jù)
        jedis.set("runoobkey", "www.runoob.com");

        // 獲取存儲(chǔ)的數(shù)據(jù)并輸出
        System.out.println("redis 存儲(chǔ)的字符串為: "+ jedis.get("runoobkey"));
    }
}

????????編譯以上程序。

連接成功 redis

存儲(chǔ)的字符串為: www.runoob.com

1.2.3 Redis Java List(列表) 實(shí)例

import java.util.List;
import redis.clients.jedis.Jedis;
 
public class RedisListJava {
    public static void main(String[] args) {
        //連接本地的 Redis 服務(wù)
        Jedis jedis = new Jedis("localhost");
        System.out.println("連接成功");

        //存儲(chǔ)數(shù)據(jù)到列表中
        jedis.lpush("site-list", "Runoob");
        jedis.lpush("site-list", "Google");
        jedis.lpush("site-list", "Taobao");

        // 獲取存儲(chǔ)的數(shù)據(jù)并輸出
        List<String> list = jedis.lrange("site-list", 0 ,2);
        for(int i=0; i<list.size(); i++) {
            System.out.println("列表項(xiàng)為: "+list.get(i));
        }
    }
}

????????編譯以上程序。

連接成功
列表項(xiàng)為: Taobao
列表項(xiàng)為: Google
列表項(xiàng)為: Runoob

1.2.4 Redis Java Keys 實(shí)例

import java.util.Iterator;
import java.util.Set;
import redis.clients.jedis.Jedis;
 
public class RedisKeyJava {
    public static void main(String[] args) {
        //連接本地的 Redis 服務(wù)
        Jedis jedis = new Jedis("localhost");
        System.out.println("連接成功");
 
        // 獲取數(shù)據(jù)并輸出
        Set<String> keys = jedis.keys("*"); 
        Iterator<String> it=keys.iterator() ;   
        while(it.hasNext()){   
            String key = it.next();   
            System.out.println(key);   
        }
    }
}

????????編譯以上程序。

連接成功

runoobkey site-list

1.3 Lettuce

????????另一個(gè)流行的Java Redis客戶端庫Lettuce,它具有異步和響應(yīng)式API,支持集群模式、Sentinel模式以及Redis 6中的新特性。以下是使用Lettuce連接Redis并執(zhí)行一些基本操作的代碼示例:

【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis,云原生進(jìn)階-PaaS專欄,云原生,redis,paas,中間件,架構(gòu)

????????在上面的代碼中,我們使用了Lettuce客戶端庫來連接Redis服務(wù)器并執(zhí)行一些基本操作。首先,我們創(chuàng)建了一個(gè)RedisClient實(shí)例,并將Redis服務(wù)器的地址和端口作為參數(shù)傳遞給create方法。然后,我們通過調(diào)用connect方法來創(chuàng)建一個(gè)StatefulRedisConnection實(shí)例,該實(shí)例提供了同步和異步的API來操作Redis。接下來,我們使用sync方法來獲取一個(gè)同步的RedisCommands實(shí)例,然后使用set方法來設(shè)置一個(gè)鍵值對(duì),get方法獲取一個(gè)鍵的值,del方法刪除一個(gè)鍵。最后,我們關(guān)閉了連接哦。

1.4 Redisson

????????Redisson是一個(gè)基于Netty框架的Java Redis客戶端庫,它提供了分布式鎖、分布式集合、分布式對(duì)象等功能,支持Redis集群和Sentinel模式。以下是使用Redisson連接Redis并執(zhí)行一些基本操作的代碼示例:

【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis,云原生進(jìn)階-PaaS專欄,云原生,redis,paas,中間件,架構(gòu)

????????在上面的代碼中,我們使用了Redisson客戶端庫來連接Redis服務(wù)器并執(zhí)行一些基本操作。首先,我們創(chuàng)建了一個(gè)Config實(shí)例,并使用useSingleServer方法來指定Redis服務(wù)器的地址和端口。然后,我們通過調(diào)用create方法來創(chuàng)建一個(gè)RedissonClient實(shí)例。接下來,我們使用getBucket方法來獲取一個(gè)RBucket實(shí)例,該實(shí)例可以用來操作一個(gè)特定的鍵。我們使用set方法來設(shè)置一個(gè)鍵值對(duì),get方法獲取一個(gè)鍵的值,delete方法刪除一個(gè)鍵。最后,我們關(guān)閉了連接。

1.5 Spring Data Redis

????????Spring Data Redis 中提供了一個(gè)高度封裝的類,針對(duì)jedis客戶端中大量api進(jìn)行了歸類封裝,將同一類型操作封裝為operation接口,具體分類如下:

  • ValueOperations:簡(jiǎn)單K-V操作
  • SetOperations :set 類型數(shù)據(jù)操作
  • ZSetOperations:zset 類型數(shù)據(jù)操作
  • HashOperations:針對(duì)map類型的數(shù)據(jù)操作
  • ListOperations:針對(duì)list類型的數(shù)據(jù)操作

????????默認(rèn)操作的是0號(hào)數(shù)據(jù)庫,也可以切換其他數(shù)據(jù)庫:

【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis,云原生進(jìn)階-PaaS專欄,云原生,redis,paas,中間件,架構(gòu)

????????設(shè)置一下序列化,這樣設(shè)置key的時(shí)候不會(huì)變成亂碼:

package com.example.demotest;
 
import org.springframework.cache.annotation.CachingConfigurerSupport;
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.StringRedisSerializer;

@Configuration
public class RedisConfig extends CachingConfigurerSupport {
 
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory){
 
        RedisTemplate<Object,Object> redisTemplate = new RedisTemplate<>();
 
        redisTemplate.setKeySerializer(new StringRedisSerializer());
 
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
 
        redisTemplate.setConnectionFactory(connectionFactory);
        return  redisTemplate;
    }
}
package com.example.demotest;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import org.springframework.test.context.junit4.SpringRunner;
 
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
 
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city2","sz");
        String city2 = (String) redisTemplate.opsForValue().get("city2");
        System.out.println("打印一下" + city2);
        //指定過期時(shí)間 10 秒
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
        //如果不存在key則設(shè)置
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "sz");
        System.out.println(aBoolean);
 
    }
 
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        //存值
        hashOperations.put("002","name","hh");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","sz");
        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);
 
        //獲得hash結(jié)構(gòu)中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }
        //獲得hash結(jié)構(gòu)中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
 
    }
 
    /**
     * 操作list類型的數(shù)據(jù)
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();
 
        //存儲(chǔ)
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");
 
        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }
 
        //獲得列表長度
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出隊(duì)列
            String elment = (String) listOperations.rightPop("mylist");
            System.out.println(elment);
        }
    }
 
    /**
     * 操作set類型的數(shù)據(jù)
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
 
        //存值
        setOperations.add("myset","a","b","c","a");
 
        //取值
        Set<String> myset = setOperations.members("myset");
        for (String s : myset) {
            System.out.println(s);
        }
        //刪除成員
        setOperations.remove("myset","a","b");
 
        //取值
        myset = setOperations.members("myset");
        for (String s : myset) {
            System.out.println(s);
        }
    }
 
    /**
     * 操作zset類型的數(shù)據(jù)
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
 
        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","d",12.0);
        zSetOperations.add("myZset","a",13.0);
 
        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        //修改分?jǐn)?shù)
        zSetOperations.incrementScore("myZset","b",20.0);
 
        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        //刪除成員
        zSetOperations.remove("myZset","a","b");
    }
 
    @Test
    public void testCommon(){
        //獲取Redis 中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }
 
        //判斷某個(gè)key是否存在
        Boolean hh = redisTemplate.hasKey("hh");
        System.out.println(hh);
 
        //刪除指定key
        redisTemplate.delete("myzset");
 
        //獲取指定key對(duì)應(yīng)的value的數(shù)據(jù)類型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());
    }
}

【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis,云原生進(jìn)階-PaaS專欄,云原生,redis,paas,中間件,架構(gòu)

?參考鏈接

Java 使用 Redis | 菜鳥教程

java在項(xiàng)目中如何使用redis_Redis_方法_操作

在Java中操作Redis_java redis_周盛歡的博客-CSDN博客

使用java操作redis_java連接redis_白未的博客-CSDN博客

Redis在java項(xiàng)目中的使用文章來源地址http://www.zghlxwxcb.cn/news/detail-698444.html

到了這里,關(guān)于【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【云原生進(jìn)階之PaaS中間件】第一章Redis-2.4緩存更新機(jī)制

    【云原生進(jìn)階之PaaS中間件】第一章Redis-2.4緩存更新機(jī)制

    ????????無論先操作db還是cache,都會(huì)有各自的問題,根本原因是cache和db的更新不是一個(gè)原子操作,因此總會(huì)有不一致的問題。想要徹底解決這種問題必須將cache和db的更新操作歸在一個(gè)事務(wù)之下(例如使用一些分布式事務(wù),或者強(qiáng)一致性的分布式協(xié)議)。或者采用串行化,

    2024年02月10日
    瀏覽(77)
  • 【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis

    【云原生進(jìn)階之PaaS中間件】第一章Redis-1.6.1Java項(xiàng)目使用Redis

    ????????redis的java客戶端很多,官方推薦的有三種: Jedis Lettuce Redisson Spring 對(duì)Redis 客戶端進(jìn)行了整合,提供了Spring Date Redis ,在Spring Boot項(xiàng)目中還提供了對(duì)應(yīng)的Starter,即spring-boot-starter-data-redis。 ????????使用Jedis操作Redis的步驟: 1.獲取鏈接; 2.執(zhí)行操作; 3.關(guān)閉連接

    2024年02月09日
    瀏覽(21)
  • 【云原生進(jìn)階之PaaS中間件】第二章Zookeeper-1-綜述

    【云原生進(jìn)階之PaaS中間件】第二章Zookeeper-1-綜述

    ????????ZooKeeper 是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),它包含一個(gè)簡(jiǎn)單的原語集,分布式應(yīng)用程序可以基于它實(shí)現(xiàn)同步服務(wù),配置維護(hù)和命名服務(wù)等。 Zookeeper是hadoop的一個(gè)子項(xiàng)目,其發(fā)展歷程無需贅述。在分布式應(yīng)用中,由于工程師不能很好地使用鎖機(jī)

    2024年02月09日
    瀏覽(87)
  • 【云原生進(jìn)階之PaaS中間件】第二章Zookeeper-3.2架構(gòu)詳解

    【云原生進(jìn)階之PaaS中間件】第二章Zookeeper-3.2架構(gòu)詳解

    ? 領(lǐng)導(dǎo)者(leader),負(fù)責(zé)進(jìn)行投票的發(fā)起和決議,更新系統(tǒng)狀態(tài) ? 學(xué)習(xí)者(learner),包括跟隨者(follower)和觀察者(observer),follower用于接受客戶端請(qǐng)求并想客戶端返回結(jié)果,在選主過程中參與投票 ? Observer可以接受客戶端連接,將寫請(qǐng)求轉(zhuǎn)發(fā)給leader,但observer不參加投票

    2024年02月08日
    瀏覽(90)
  • 【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-3-RabbitMQ安裝

    【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-3-RabbitMQ安裝

    1.1.1 環(huán)境準(zhǔn)備 ????????要在Linux環(huán)境下安裝RabbitMQ,首先我們要有一個(gè)Linux環(huán)境,此處我們使用CentOS7虛擬機(jī)進(jìn)行演示。如果本地還沒有裝過虛擬機(jī),可以參考我之前的文章搭建虛擬機(jī)環(huán)境:VMware Workstation 14安裝教程、虛擬機(jī)環(huán)境搭建(VMware Workstation14 + centos7)、VMware+CentO

    2024年02月20日
    瀏覽(92)
  • 【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-4.1-原理機(jī)制與進(jìn)階特性

    【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-4.1-原理機(jī)制與進(jìn)階特性

    1.客戶端連接到消息隊(duì)列服務(wù)器,打開一個(gè)Channel。 2.客戶端聲明一個(gè)Exchange,并設(shè)置相關(guān)屬性。 3.客戶端聲明一個(gè)Queue,并設(shè)置相關(guān)屬性。 4.客戶端使用Routing key,在Exchange和Queue之間建立好綁定關(guān)系。 5.客戶端投遞消息到Exchange。 6.Exchange接收到消息后,就根據(jù)消息的key和已經(jīng)

    2024年02月21日
    瀏覽(21)
  • 【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-1-簡(jiǎn)介及工作模式

    【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-1-簡(jiǎn)介及工作模式

    ????????RabbitMQ 是一個(gè)由 Erlang 語言開發(fā)的 AMQP 的開源實(shí)現(xiàn)。AMQP(Advanced Message Queue:高級(jí)消息隊(duì)列協(xié)議)它是應(yīng)用層協(xié)議的一個(gè)開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì),基于此協(xié)議的客戶端與消息中間件可傳遞消息,并不受產(chǎn)品、開發(fā)語言等條件的限制。RabbitMQ 最初起源于

    2024年02月21日
    瀏覽(92)
  • 【云原生進(jìn)階之PaaS中間件】第三章Kafka-4.4-消費(fèi)者工作流程

    【云原生進(jìn)階之PaaS中間件】第三章Kafka-4.4-消費(fèi)者工作流程

    1.1.1 消費(fèi)者群組 ????????Kafka 里消費(fèi)者從屬于消費(fèi)者群組,一個(gè)群組里的消費(fèi)者訂閱的都是同一個(gè)主題,每個(gè)消費(fèi)者接收主題一部分分區(qū)的消息。 ????????如上圖,主題 T 有 4 個(gè)分區(qū),群組中只有一個(gè)消費(fèi)者,則該消費(fèi)者將收到主題 T1 全部 4 個(gè)分區(qū)的消息。 ?????

    2024年02月22日
    瀏覽(31)
  • 【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-4.3-如何保證消息的可靠性投遞與消費(fèi)

    【云原生進(jìn)階之PaaS中間件】第四章RabbitMQ-4.3-如何保證消息的可靠性投遞與消費(fèi)

    ????????根據(jù)RabbitMQ的工作模式,一條消息從生產(chǎn)者發(fā)出,到消費(fèi)者消費(fèi),需要經(jīng)歷以下4個(gè)步驟: 生產(chǎn)者將消息發(fā)送給RabbitMQ的Exchange交換機(jī); Exchange交換機(jī)根據(jù)Routing key將消息路由到指定的Queue隊(duì)列; 消息在Queue中暫存,等待消費(fèi)者消費(fèi)消息; 消費(fèi)者從Queue中取出消息消費(fèi)

    2024年03月11日
    瀏覽(28)
  • 云原生中間件開源現(xiàn)狀分析與華為中間件案例解讀

    云原生中間件開源現(xiàn)狀分析與華為中間件案例解讀

    開源中間件在企業(yè)分布式架構(gòu)搭建和服務(wù)治理中扮演著重要的角色,尤其是在解決我國網(wǎng)絡(luò)高并發(fā)和業(yè)務(wù)復(fù)雜性問題方面。然而,盡管中間件市場(chǎng)由商業(yè)閉源廠商主導(dǎo),提供了一系列基礎(chǔ)中間件和數(shù)據(jù)類中間件以支持穩(wěn)定的應(yīng)用程序運(yùn)行環(huán)境,開源中間件生態(tài)卻相對(duì)分散和薄

    2024年02月02日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包