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

使用redis如何生成自增序列號碼

 更新時間:2022年11月23日 08:26:23   作者:飯團(tuán)小哥哥iop  
這篇文章主要介紹了使用redis如何生成自增序列號碼,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

redis生成自增序列號碼

導(dǎo)入依賴

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

yml 配置

? redis:
? ? ? database: 10
? ? ? host: localhost
? ? ? port: 7701
? ? ? password: root

工具方法

package com.sd.sdactivity.controller;
import io.netty.util.internal.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**

?* 使用redis生成自增序列

?*/
@RestController
public class testController {
@Autowired
private StringRedisTemplate redisTemplate;
? ? /**
? ? ?* 自增序列號
? ? ?* @param prefix ?前綴
? ? ?* @param numLength ?要生成多少位數(shù)字
? ? ?* @return
? ? ?*/?
@RequestMapping("/SeqGenerator")
? ? public String SeqGenerator(String prefix,int numLength){
? ? ? ? String upperCode =""; ??
? ?Long size=redisTemplate.opsForList().size(prefix);//查找 prefix 的key值的數(shù)據(jù)長度
? ? ? ? if(size>0){//有數(shù)據(jù)
List leve =redisTemplate.opsForList().range(prefix,0,-1);//獲取該key下面的所有值(-1 所有的值,;1下一個值
? upperCode=leve.get(leve.size()-1).toString();//返回最后一個值
? ? ? ? }
? ? ? ? ? ?String returnCode="";
? ? ? ? ? int Suffix; ?//后綴數(shù)字 if (!StringUtil.isNullOrEmpty(upperCode)){ //有數(shù)據(jù)
? ? ? ? ? ? String sequence =upperCode.substring(prefix.length());//截取前綴開始的后面的數(shù)字
? ? ? ? ? ? Suffix=Integer.parseInt(sequence);?
? ? ? ? ? ? ?Suffix++;//最后的序號加一
? ? ? ? ?}else{
? ? ? ? ? ? Suffix=1;//沒有數(shù)據(jù)
? ? ? ? }
? ? ? ? ? ?returnCode=prefix+String.format("%0"+numLength+"d",Suffix);//后綴不夠numLength長,前面補(bǔ)充0
? ? ? ? redisTemplate.opsForList().rightPush(prefix,returnCode);//存入Redis
? ? ? ? System.out.println(returnCode+"%%%");
? ? ? ? return ?returnCode;
? }
}

測試

2020-05-13 11:43:31.230  INFO 39268 --- [           main] c.f.SpringbootRedisApplicationTests      : seq00000002

redis生成唯一編號

在系統(tǒng)開發(fā)中,保證數(shù)據(jù)的唯一性是至關(guān)重要的一件事,目前開發(fā)中常用的方式有使用數(shù)據(jù)庫的自增序列、UUID、時間戳或者時間戳+隨機(jī)數(shù)等。

因?yàn)镽edis是原子性的,所以我們可以用redis生成一個唯一的號碼,記錄一個編號,我們用這個編號可以配合時間戳生成一個唯一的key

接下來是上代碼

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
/**
 * 使用redis生成唯一key
 */
@Service("reportNumberUtils")
public class ReportNumberUtils {
 
    private static Logger logger = LoggerFactory.getLogger(ReportNumberUtils.class);
 
    @Resource
    private RedisTemplate redisTemplate;
 
    //傳入制定的key和prefix
    public String getSeqNo(String key, String prefix)
    {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        calendar.set(Calendar.MILLISECOND, 999);
        //設(shè)置過期時間,這里設(shè)置為當(dāng)天的23:59:59
        Date expireDate = calendar.getTime();
        //返回當(dāng)前redis中的key的最大值
        Long seq = generate(redisTemplate, key, expireDate);
        //獲取當(dāng)天的日期,格式為yyyyMMdd
        String date = new SimpleDateFormat("yyyyMMdd").format(expireDate);
        //生成八為的序列號,如果seq不夠八位,seq前面補(bǔ)0,
        //如果seq位數(shù)超過了八位,那么無需補(bǔ)0直接返回當(dāng)前的seq
        String sequence = StringUtils.leftPad(seq.toString(), 8, "0");
        if (prefix == null)
        {
            prefix = "";
        }
        //拼接業(yè)務(wù)編號
        String seqNo = prefix + date + sequence;
        logger.info("KEY:{}, 序列號生成:{}, 過期時間:{}", key, seqNo, String.format("%tF %tT ", expireDate, expireDate));
        return seqNo;
    }
 
    /**
     * @param key
     * @param expireTime <i>過期時間</i>
     * @return
     */
    public static long generate(RedisTemplate<?,?> redisTemplate,String key,Date expireTime) {
        //RedisAtomicLong為原子類,根據(jù)傳入的key和redis鏈接工廠創(chuàng)建原子類
        RedisAtomicLong counter = new RedisAtomicLong(key,redisTemplate.getConnectionFactory());
        //設(shè)置過期時間
        counter.expireAt(expireTime);
        //返回redis中key的值,內(nèi)部實(shí)現(xiàn)下面詳細(xì)說明
        return counter.incrementAndGet();
    }
}

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

相關(guān)文章

  • 解決redis服務(wù)啟動失敗的問題

    解決redis服務(wù)啟動失敗的問題

    今天小編就為大家分享一篇解決redis服務(wù)啟動失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 基于Redis的限流器的實(shí)現(xiàn)(示例講解)

    基于Redis的限流器的實(shí)現(xiàn)(示例講解)

    下面小編就為大家分享一篇基于Redis的限流器的實(shí)現(xiàn)(示例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Redis常見限流算法原理及實(shí)現(xiàn)

    Redis常見限流算法原理及實(shí)現(xiàn)

    這篇文章主要介紹了Redis常見限流算法原理及實(shí)現(xiàn),限流簡稱流量限速(Rate?Limit)是指只允許指定的事件進(jìn)入系統(tǒng),超過的部分將被拒絕服務(wù)、排隊(duì)或等待、降級等處理
    2022-08-08
  • 使用redis-plus-plus庫連接redis的實(shí)現(xiàn)方法

    使用redis-plus-plus庫連接redis的實(shí)現(xiàn)方法

    本文主要介紹了使用redis-plus-plus庫連接redis的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • 詳解Redis集群搭建的三種方式

    詳解Redis集群搭建的三種方式

    Redis是一個開源的key-value存儲系統(tǒng),大部分互聯(lián)網(wǎng)企業(yè)都用來做服務(wù)器端緩存。Redis在3.0版本前只支持單實(shí)例模式,雖然支持主從模式、哨兵模式部署來解決單點(diǎn)故障,但是現(xiàn)在互聯(lián)網(wǎng)企業(yè)動輒大幾百G的數(shù)據(jù),沒法滿足業(yè)務(wù)的需求,所以Redis在3.0版本以后就推出了集群模式。
    2021-05-05
  • Redis進(jìn)行相關(guān)優(yōu)化詳解

    Redis進(jìn)行相關(guān)優(yōu)化詳解

    這篇文章主要介紹了Redis進(jìn)行相關(guān)優(yōu)化,Redis在項(xiàng)目中進(jìn)行廣泛使用,那么在日常的開發(fā)過程中,我們在使用Redis的過程中需要注意那些呢?本文將從三個維度來講解如何進(jìn)行Redis的優(yōu)化
    2022-08-08
  • Redis?Lua同步鎖實(shí)現(xiàn)源碼解析

    Redis?Lua同步鎖實(shí)現(xiàn)源碼解析

    這篇文章主要為大家介紹了Redis?Lua同步鎖實(shí)現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Redis集群的離線安裝步驟及原理詳析

    Redis集群的離線安裝步驟及原理詳析

    這篇文章主要給大家介紹了關(guān)于Redis集群的離線安裝步驟及原理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 使用Redis有序集合實(shí)現(xiàn)IP歸屬地查詢詳解

    使用Redis有序集合實(shí)現(xiàn)IP歸屬地查詢詳解

    這篇文章主要介紹了使用Redis有序集合實(shí)現(xiàn)IP歸屬地查詢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Redis使用元素刪除的布隆過濾器來解決緩存穿透問題

    Redis使用元素刪除的布隆過濾器來解決緩存穿透問題

    本文主要介紹了Redis使用元素刪除的布隆過濾器來解決緩存穿透問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

乌兰县| 共和县| 屏东县| 镶黄旗| 乡城县| 金溪县| 揭东县| 内江市| 长泰县| 镶黄旗| 修文县| 东安县| 寿光市| 浮山县| 西畴县| 沈丘县| 紫金县| 丰城市| 牙克石市| 板桥市| 岑巩县| 苍溪县| 营口市| 洱源县| 临江市| 当雄县| 兴安盟| 双牌县| 汽车| 天台县| 个旧市| 屏东县| 桐庐县| 隆林| 潢川县| 甘谷县| 万安县| 渭源县| 盱眙县| 芦山县| 金阳县|