最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用RedisAtomicLong優(yōu)化性能問題

 更新時間:2022年11月23日 08:35:07   作者:飯團(tuán)小哥哥iop  
這篇文章主要介紹了使用RedisAtomicLong優(yōu)化性能問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

RedisAtomicLong優(yōu)化性能

在項目中許多過這樣的需求,記錄留做備忘。

需要創(chuàng)建一個遞增序列,這個序列會提供給多個應(yīng)用來使用,這樣就需要保持序列的原子遞增。

RedisAtomicLong

spring-data-redis包中提供的,可以對數(shù)據(jù)中的Long類型進(jìn)行原子性操作的類,下面是這個類的頭:

/**
?* Atomic long backed by Redis. Uses Redis atomic increment/decrement and watch/multi/exec operations for CAS
?* operations.
?* ?* @see java.util.concurrent.atomic.AtomicLong
?* @author Costin Leau
?* @author Thomas Darimont
?* @author Christoph Strobl
?* @author Mark Paluch
?*/
public class RedisAtomicLong extends Number implements Serializable, BoundKeyOperations<String> {

我們可以看到j(luò)ava.util.concurrent.atomic.AtomicLong,和java自帶的atomic包一樣進(jìn)行原子性操作,兩者不同的是:

  • AtomicLong只能在一個應(yīng)用中使用
  • RedisAtomicLong可以在所有與Redis有連接的應(yīng)用中使用

開始優(yōu)化

應(yīng)用初始化時創(chuàng)建RedisAtomicLong實例。

?//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.jiu.common.redis;

import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;

public class RedisSequenceFactory {
? ? private static final Logger log = LoggerFactory.getLogger(RedisSequenceFactory.class);
? ? @Autowired
? ? private ObjectRedisTemplate<Integer> redisTemplate;

? ? public RedisSequenceFactory() {
? ? }

? ? public void set(String key, long value) {
? ? ? ? RedisAtomicLong counter = new RedisAtomicLong(key, this.redisTemplate.getConnectionFactory());
? ? ? ? counter.set(value);
? ? }

? ? public long generate(String key, int increment) {
? ? ? ? RedisAtomicLong counter = new RedisAtomicLong(key, this.redisTemplate.getConnectionFactory());
? ? ? ? return counter.addAndGet((long)increment);
? ? }

? ? public List<Long> generateBatch(String key, int increment, int size) {
? ? ? ? RedisAtomicLong counter = new RedisAtomicLong(key, this.redisTemplate.getConnectionFactory());
? ? ? ? long max = counter.addAndGet((long)(increment * size));
? ? ? ? long min = max - (long)(increment * (size - 1));
? ? ? ? List<Long> list = new ArrayList();
? ? ? ? list.add(min);

? ? ? ? for(int i = 1; i < size; ++i) {
? ? ? ? ? ? list.add(min + (long)(increment * i));
? ? ? ? }

? ? ? ? return list;
? ? }

? ? public long queryValue(String key) {
? ? ? ? Integer val = (Integer)this.redisTemplate.get(key);
? ? ? ? return val == null ? 0L : (long)val.intValue();
? ? }
}

測試代碼

public static String tradeIdIncRedisKey = "order:orderid_inc";
? ? ?@Test
? ? public long generateId(){
? ? ? ? return redisSequenceFactory.generate(tradeIdIncRedisKey,1);
? ? }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java信號量全解析

    Java信號量全解析

    這篇文章主要介紹了Java信號量的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-01-01
  • java語法糖之jdk迭代的新特性匯總

    java語法糖之jdk迭代的新特性匯總

    什么是語法糖?泛型、自動裝箱拆箱、變長參數(shù)、增強(qiáng)for循環(huán)、switch字符類型、lambda表達(dá)式等,這些其實都是語法糖。這篇文章主要給大家介紹了關(guān)于java語法糖之jdk迭代的新特性的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • Java基于Guava Retrying實現(xiàn)重試功能

    Java基于Guava Retrying實現(xiàn)重試功能

    這篇文章主要介紹了Java基于Guava Retrying實現(xiàn)重試功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • java異常處理執(zhí)行順序詳解try catch finally

    java異常處理執(zhí)行順序詳解try catch finally

    try catch語句是java語言用于捕獲異常并進(jìn)行處理的標(biāo)準(zhǔn)方式,對于try catch及try catch finally執(zhí)行順序必須有深入的了解
    2021-10-10
  • Java+Selenium調(diào)用JavaScript的方法詳解

    Java+Selenium調(diào)用JavaScript的方法詳解

    這篇文章主要為大家講解了java在利用Selenium操作瀏覽器網(wǎng)站時候,有時會需要用的JavaScript的地方,代碼該如何實現(xiàn)呢?快跟隨小編一起學(xué)習(xí)一下吧
    2023-01-01
  • java實現(xiàn)圖片加水印效果

    java實現(xiàn)圖片加水印效果

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)圖片加水印效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java實現(xiàn)角色及菜單權(quán)限的項目實踐

    java實現(xiàn)角色及菜單權(quán)限的項目實踐

    在Java中,實現(xiàn)角色及菜單權(quán)限管理涉及定義實體類、設(shè)計數(shù)據(jù)庫表、實現(xiàn)服務(wù)層和控制器層,這種管理方式有助于有效控制用戶權(quán)限,適用于企業(yè)級應(yīng)用,感興趣的可以一起來了解一下
    2024-09-09
  • 關(guān)于springboot忽略接口,參數(shù)注解的使用ApiIgnore

    關(guān)于springboot忽略接口,參數(shù)注解的使用ApiIgnore

    這篇文章主要介紹了關(guān)于springboot忽略接口,參數(shù)注解的使用ApiIgnore,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java?String源碼contains題解重復(fù)疊加字符串匹配

    Java?String源碼contains題解重復(fù)疊加字符串匹配

    這篇文章主要為大家介紹了Java?String源碼contains題解重復(fù)疊加字符串匹配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解Maven倉庫之本地倉庫、遠(yuǎn)程倉庫

    詳解Maven倉庫之本地倉庫、遠(yuǎn)程倉庫

    這篇文章主要介紹了Maven倉庫之本地倉庫、遠(yuǎn)程倉庫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

明光市| 象州县| 邢台市| 万荣县| 喜德县| 滦平县| 胶州市| 保山市| 大港区| 遂川县| 桃源县| 策勒县| 重庆市| 盘锦市| 平阳县| 合川市| 威信县| 会泽县| 泸溪县| 达尔| 汕头市| 两当县| 南安市| 饶河县| 娄烦县| 斗六市| 怀集县| 思南县| 团风县| 南溪县| 瑞安市| 右玉县| 府谷县| 林州市| 麻城市| 金秀| 平陆县| 广水市| 东乌珠穆沁旗| 夏津县| 邻水|