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

Redis那些事兒(一)

這篇具有很好參考價(jià)值的文章主要介紹了Redis那些事兒(一)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

????????說到redis大家都不陌生,其中包括:共有16個(gè)數(shù)據(jù)庫,默認(rèn)為第0個(gè)數(shù)據(jù)庫;數(shù)據(jù)以key-value鍵值的形式存儲;數(shù)據(jù)類型包括String、List、Hash、Set等,其中最常用的是字符串;是單線程的、基于內(nèi)存的,主要受內(nèi)存和網(wǎng)絡(luò)帶寬的影響… 這些都是基于Redis的基礎(chǔ)理論知識儲備。接下來我會通過開發(fā)中的StringRedisTemplate對象作為切入點(diǎn),說一說Redis在開發(fā)中的那些事兒。

1. jedis還是lettuce?

????????兩者都是redis的客戶端,對redis操作進(jìn)行了封裝。其中l(wèi)ettuce是內(nèi)部使用netty進(jìn)行網(wǎng)絡(luò)通信,性能很強(qiáng),jedis已經(jīng)停止更新了。lettuce相對于jedis在性能方面更為出色,jedis在單個(gè)線程中是線程安全的,功能上更加豐富,支持的數(shù)據(jù)類型更多。無論Springboot2.0以后默認(rèn)使用lettuce作為操作redis的客戶端,選擇jedis還是lettuce,都需要根據(jù)具體的業(yè)務(wù)需求和場景進(jìn)行評估和測試,以確定最適合的工具庫。兩者的分別使用如下:
pom依賴

jedis

<!-- redis -->
<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>

lettuce

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

yaml配置

jedis

spring:
  redis:
    host: localhost
    password:
    port: 6379
    timeout: 10s  # 連接超時(shí)時(shí)間
    jedis:
      pool:
        max-active: 1000  # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
        max-wait: -1   # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
        max-idle: 10      # 連接池中的最大空閑連接
        min-idle: 5       # 連接池中的最小空閑連接

lettuce

spring:
  redis:
    host: localhost
    password:
    port: 6379
    timeout: 10s  # 連接超時(shí)時(shí)間
    lettuce:
      pool:
        max-active: 1000  # 連接池最大連接數(shù)(使用負(fù)值表示沒有限制)
        max-wait: -1   # 連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒有限制)
        max-idle: 10      # 連接池中的最大空閑連接
        min-idle: 5       # 連接池中的最小空閑連接

2. 字符串緩存

應(yīng)用場景1:基礎(chǔ)緩存

????????對于redis有90%的使用場景都是基于String作為基礎(chǔ)緩存使用的,對于經(jīng)常使用的并且修改頻率較低的數(shù)據(jù)存儲在Redis緩存中,可以大大提高系統(tǒng)性能和響應(yīng)速度,避免頻繁地從數(shù)據(jù)庫或其他后端服務(wù)讀取數(shù)據(jù)。對象、集合等數(shù)據(jù)也可以通JSON序列化成字符串進(jìn)行存儲,大大提升了系統(tǒng)的并發(fā)性能,節(jié)省系統(tǒng)資源的消耗。

存字符串、對象、集合到緩存中,redisTemplate.opsForValue().set(key, value)

    //存普通字符串
    redisTemplate.opsForValue().set("testKey", "123456");
    //存某對象
    Person person = getPerson(); //TODO 獲取到某個(gè)實(shí)例對象
    redisTemplate.opsForValue().set("testObj", JSON.toJSONString(person));
    //存某集合
    List<Person> persons = getPersonList(); //TODO 獲取到某個(gè)實(shí)例集合
    redisTemplate.opsForValue().set("testList", JSON.toJSONString(persons));

存入緩存中,有時(shí)效性,超時(shí)之后緩存自動刪除,redisTemplate.opsForValue().set(key, value, time)

    //設(shè)置登錄token,30分鐘有效(第3個(gè)參數(shù)支持:天、小時(shí)、分鐘、秒等)
    redisTemplate.opsForValue().set("token", "123456", Duration.ofMinutes(30));

從緩存中讀取數(shù)據(jù),數(shù)據(jù)為字符串,可按實(shí)際存入的值進(jìn)行序列化,redisTemplate.opsForValue().get(key)

    //從緩存中獲取某對象
    String s1 = redisTemplate.opsForValue().get("testObj");
    Person person = JSON.parseObject(s1, Person.class);
    //從緩存中獲取某集合
    String s2 = redisTemplate.opsForValue().get("testList");
    List<Person> persons = JSON.parseArray(s2, Person.class);

獲取緩存剩余時(shí)間,redisTemplate.getExpire(key)

    //返回值為long值,單位是秒,如果是-1時(shí)代表的是永久保存
    Long expire = redisTemplate.getExpire("testKey");

重置緩存時(shí)間,redisTemplate.expire(key, time, timeUnit)

    //重置時(shí)間為2天
    redisTemplate.expire("testKey", 2, TimeUnit.DAYS);

判斷是否存在,redisTemplate.hasKey(key)

    Boolean b = redisTemplate.hasKey("testKey");

模糊匹配獲取所有的key值,redisTemplate.keys(“*”);

    //獲取所有的key值
    Set<String> keys = redisTemplate.keys("*");
    //獲取所有的testKey*模糊的key值
    Set<String> keys = redisTemplate.keys("testKey*");

刪除緩存,redisTemplate.delete(key)

    redisTemplate.delete("testKey");

只是列了部分,還有multiSet、getRange、increment等方法都很實(shí)用

應(yīng)用場景2:重復(fù)提交驗(yàn)證

????????相同請求短時(shí)間內(nèi)請求多次過濾,尤其是用于重要表單信息提交、秒殺請求的應(yīng)用場景。在每次接收到請求時(shí),生成一個(gè)唯一的請求標(biāo)識(例如,可以使用請求的URL和參數(shù)進(jìn)行哈希計(jì)算),在Redis中使用請求標(biāo)識作為Key,將其存入到緩存中,設(shè)置一個(gè)合適的時(shí)間自動清理緩存中的過期請求標(biāo)識,避免占用過多內(nèi)存。這樣就可以實(shí)現(xiàn)用Redis有效地進(jìn)行接口重復(fù)請求的驗(yàn)證。

以下為請求重復(fù)驗(yàn)證工具類實(shí)例代碼

@Component
public class RequestValidator {

    @Autowired
    private StringRedisTemplate redisTemplate;

    /**
     * 重復(fù)請求方法
     * @param requestId 請求標(biāo)識
     * @param validSecond 有效時(shí)間(單位:秒)
     * @return true重復(fù) / false不重復(fù)
     */
    public boolean isDuplicateRequest(String requestId, Long validSecond) {
        String s = redisTemplate.opsForValue().get(requestId);
        //緩存中取值不為空,證明是重復(fù)請求
        if (StringUtils.isNotEmpty(s)) {
            return true;
        }
        //緩存中取值為空,證明非重復(fù)請求,把請求標(biāo)識放入到緩存中
        redisTemplate.opsForValue().set(requestId, "DUPLICATE_REQUEST", Duration.ofSeconds(validSecond));
        return false;
    }
}

3. List緩存

應(yīng)用場景:高并發(fā)場景

????????opsForList提供了一組簡單而直觀的方法來操作列表類型的數(shù)據(jù),如leftPushAll、rightPushAll等,這使得批量存儲變得非常方便,并且代碼更易讀,可以很好地支持高并發(fā)的場景。Redis的列表是按照插入的順序進(jìn)行存儲的,利用leftPushAll或rightPushAll方法進(jìn)行批量存儲時(shí),元素會按照給定的順序依次插入到列表中,可以確保存儲的順序是可控的。雖然opsForList提供了方便的批量存儲操作,但在實(shí)際使用時(shí)仍需考慮內(nèi)存消耗、網(wǎng)絡(luò)傳輸?shù)纫蛩?,存儲?shù)據(jù)過大如果來不及消費(fèi),就會造成系統(tǒng)內(nèi)存溢出導(dǎo)致服務(wù)器崩潰,存在數(shù)據(jù)丟失的風(fēng)險(xiǎn)。

? 具體怎么使用,在之前的文章中有介紹,在這里Java高并發(fā)之Redis批量提交數(shù)據(jù)庫文章來源地址http://www.zghlxwxcb.cn/news/detail-745414.html

到了這里,關(guān)于Redis那些事兒(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Redis學(xué)習(xí)(三)分布式緩存、多級緩存、Redis實(shí)戰(zhàn)經(jīng)驗(yàn)、Redis底層原理

    Redis學(xué)習(xí)(三)分布式緩存、多級緩存、Redis實(shí)戰(zhàn)經(jīng)驗(yàn)、Redis底層原理

    單節(jié)點(diǎn)Redis存在著: 數(shù)據(jù)丟失問題:單節(jié)點(diǎn)宕機(jī),數(shù)據(jù)就丟失了。 并發(fā)能力和存儲能力問題:單節(jié)點(diǎn)能夠滿足的并發(fā)量、能夠存儲的數(shù)據(jù)量有限。 故障恢復(fù)問題:如果Redis宕機(jī),服務(wù)不可用,需要一種自動的故障恢復(fù)手段。 RDB持久化 RDB(Redis database backup file,Redis數(shù)據(jù)庫備份

    2024年02月16日
    瀏覽(32)
  • Redis應(yīng)用(1)緩存(1.2)------Redis三種緩存問題

    Redis應(yīng)用(1)緩存(1.2)------Redis三種緩存問題

    三者出現(xiàn)的根本原因是:Redis緩存命中率下降,請求直接打到DB上了。? 一、 緩存穿透: 1、定義: 緩存穿透是指客戶端請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,這樣緩存永遠(yuǎn)不會生效,這些請求都會打到數(shù)據(jù)庫。所謂穿透,就是直接透過了redis,直接透到數(shù)據(jù)庫。 2、原因

    2024年01月24日
    瀏覽(30)
  • 【Redis】Redis作為緩存

    【Redis】Redis作為緩存

    【Redis】Redis常見面試題(2) 緩存在計(jì)算機(jī)系統(tǒng)中有著重要的作用,它可以顯著提高系統(tǒng)的性能和響應(yīng)速度 提升系統(tǒng)性能: 緩存將常用的數(shù)據(jù)或計(jì)算結(jié)果存儲在高速的存儲介質(zhì)中,如內(nèi)存,以便快速地響應(yīng)請求。通過減少對慢速存儲介質(zhì)(如硬盤或數(shù)據(jù)庫)的訪問次數(shù),可

    2024年02月09日
    瀏覽(20)
  • 【Redis-02】Redis的緩存

    【Redis-02】Redis的緩存

    緩存( Cache),就是數(shù)據(jù)交換的 緩沖區(qū) ,俗稱的緩存就是 緩沖區(qū)內(nèi)的數(shù)據(jù) 。 一句話:因?yàn)?速度快,好用 。緩存數(shù)據(jù)存儲于代碼中,而代碼運(yùn)行在內(nèi)存中, 內(nèi)存的讀寫性能遠(yuǎn)高于磁盤 ,緩存可以大大降低 用戶訪問并發(fā)量帶來的 服務(wù)器讀寫壓力。 使用根據(jù)id查詢的例子來進(jìn)行說明 1.3

    2024年02月16日
    瀏覽(17)
  • redis緩存設(shè)計(jì)-Redis(八)

    上篇文章介紹了redis緩存設(shè)計(jì),熱點(diǎn)key,bigkey注意事項(xiàng)。 原創(chuàng)?redis緩存設(shè)計(jì)-Redis(七) https://blog.csdn.net/ke1ying/article/details/131268967 命令使用 hgetall,lrange,smembers,zrange,sinter等并非不能使用,要指定明確的值,遍歷的話要使用 hscan、sscan、zscan 代替。 禁止使用keys,flushall,

    2024年02月10日
    瀏覽(18)
  • 【Redis(8)】Spring Boot整合Redis和Guava,解決緩存穿透、緩存擊穿、緩存雪崩等緩存問題

    在緩存技術(shù)的挑戰(zhàn)及設(shè)計(jì)方案我們介紹了使用緩存技術(shù)可能會遇到的一些問題,那么如何解決這些問題呢? 在構(gòu)建緩存系統(tǒng)時(shí),Spring Boot和Redis的結(jié)合提供了強(qiáng)大的支持,而Guava的 LoadingCache 則為緩存管理帶來了便捷的解決方案。下面我將介紹如何通過整合Spring Boot、Redis和Gu

    2024年04月22日
    瀏覽(24)
  • Redis 緩存穿透、緩存雪崩、緩存擊穿

    Redis 緩存穿透、緩存雪崩、緩存擊穿

    緩存穿透是指客戶端請求的數(shù)據(jù)在緩存中和數(shù)據(jù)庫中都不存在,這樣緩存永遠(yuǎn)不會生效,這些請求都會打到數(shù)據(jù)庫。 常見的解決方案有兩種: ????????緩存空對象 ???????? ????????優(yōu)點(diǎn):實(shí)現(xiàn)簡單,維護(hù)方便 ????????????????缺點(diǎn): 額外的內(nèi)存消耗 可能造

    2024年02月02日
    瀏覽(28)
  • redis 緩存雪崩 && 緩存擊穿 && 緩存穿透

    什么是緩存雪崩 當(dāng)我們提到緩存系統(tǒng)中的問題,緩存雪崩是一個(gè)經(jīng)常被討論的話題。緩存雪崩是指在某一時(shí)刻發(fā)生大量的緩存失效,導(dǎo)致瞬間大量的請求直接打到了數(shù)據(jù)庫,可能會導(dǎo)致數(shù)據(jù)庫瞬間壓力過大甚至宕機(jī)。尤其在高并發(fā)的系統(tǒng)中,這種情況會導(dǎo)致連鎖反應(yīng),整個(gè)系

    2024年02月07日
    瀏覽(30)
  • Redis-緩存穿透、緩存崩潰、緩存擊穿

    本文主要介紹Redis中緩存穿透、緩存崩潰和緩存擊穿 一般情況下,用戶請求到后臺,會先從緩存中取數(shù)據(jù)。如果在緩存中取到數(shù)據(jù),就直接返回 結(jié)果;如果取不到數(shù)據(jù)就需要查詢數(shù)據(jù)庫,從數(shù)據(jù)庫中取到數(shù)據(jù)后會同步更新到緩存,并返回結(jié)果。下一個(gè)用戶就可以直接從緩存中

    2024年02月16日
    瀏覽(19)
  • Redis學(xué)習(xí)(三)持久化機(jī)制、分布式緩存、多級緩存、Redis實(shí)戰(zhàn)經(jīng)驗(yàn)

    Redis學(xué)習(xí)(三)持久化機(jī)制、分布式緩存、多級緩存、Redis實(shí)戰(zhàn)經(jīng)驗(yàn)

    單節(jié)點(diǎn)Redis存在著: 數(shù)據(jù)丟失問題:單節(jié)點(diǎn)宕機(jī),數(shù)據(jù)就丟失了。 并發(fā)能力和存儲能力問題:單節(jié)點(diǎn)能夠滿足的并發(fā)量、能夠存儲的數(shù)據(jù)量有限。 故障恢復(fù)問題:如果Redis宕機(jī),服務(wù)不可用,需要一種自動的故障恢復(fù)手段。 RDB持久化 RDB(Redis database backup file,Redis數(shù)據(jù)庫備份

    2024年02月16日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包