首页 > 数据库 >使用redis实现自增序列

使用redis实现自增序列

时间:2023-01-12 17:23:53浏览次数:42  
标签:自增 set redis Long key 序列 new todayEnd Calendar

来源:

https://www.cnblogs.com/shigj/p/11215262.html

public class TestService {
 
	@Resource
	RedisTemplate<String, Object> redisTemplate;
	
	public String getId() {
	    SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
	    Date date=new Date();
	    String formatDate=sdf.format(date);
	    String key="key"+formatDate;
	    Long incr = getIncr(key, getCurrent2TodayEndMillisTime());
	    if(incr==0) {
	    	incr = getIncr(key, getCurrent2TodayEndMillisTime());//从001开始
	    }
	    DecimalFormat df=new DecimalFormat("000");//三位序列号
	    return formatDate+df.format(incr);
	}
	
	public Long getIncr(String key, long liveTime) {
            RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
            Long increment = entityIdCounter.getAndIncrement();
 
            if ((null == increment || increment.longValue() == 0) && liveTime > 0) {//初始设置过期时间
                entityIdCounter.expire(liveTime, TimeUnit.MILLISECONDS);//单位毫秒
            }
            return increment;
        }
 
	//现在到今天结束的毫秒数
	public Long getCurrent2TodayEndMillisTime() {
	    Calendar todayEnd = Calendar.getInstance();
	    // Calendar.HOUR 12小时制
	    // HOUR_OF_DAY 24小时制
	    todayEnd.set(Calendar.HOUR_OF_DAY, 23); 
	    todayEnd.set(Calendar.MINUTE, 59);
	    todayEnd.set(Calendar.SECOND, 59);
	    todayEnd.set(Calendar.MILLISECOND, 999);
	    return todayEnd.getTimeInMillis()-new Date().getTime();
	}
	
}

  

标签:自增,set,redis,Long,key,序列,new,todayEnd,Calendar
From: https://www.cnblogs.com/chyf1990/p/17047266.html

相关文章

  • Redis-独立功能-发布与订阅
    发布与订阅Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者(subscribe......
  • 【一句话】Redis的3中缓存策略
    首先一句话:旁路缓存模式策略:写->写DB,删缓存,读->读cache,没有则读DB,然后更新到缓存读写穿透策略:写->写缓存,然后由缓存系统写DB,读->读cache,没有则将DB写入cache,再读cache异......
  • Redis-多机数据库-集群
    集群Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能。Redis服务器在启动时会根据cluster-enabled配置选项是否为y......
  • redis命令清理key
    ###手动清除单个key:redis-cli-h'ipaddr'-p6379-a'passwd'-n0keys'keyName'|xargsredis-cli-h'ipaddr'-p6379-a'passwd'-n0del;或者手动清除单个k......
  • 洛谷 P8077 [WC2022] 序列变换 题解
    题目链接。WC2023之前补一下WC2022的题,参考了官方题解。首先,把括号序列转化为二叉树,\(\texttt{(A)B}\)转为一个点的左子树是\(A\),右子树是\(B\)。相当于括号序列先......
  • RedisUtil以及可放入Map和List格式的配置
    RedisUtilpackagecom.diit.onemap.common.utils;importorg.springframework.data.redis.core.*;importorg.springframework.stereotype.Service;importjavax.ann......
  • redis 中的 set
    set是String中的无序集合 底层是是value为null的hash表 时间复杂化是o(1);sadd k1v1v2v3 set中添加数据smembersk1取出set中全部的数据sismemberk1v1 ......
  • LeetCode刷题(49)~最长连续递增序列【双重循环/一次循环/滑动窗口】
    题目描述给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。示例1:输入:[1,3,5,4,7]输出:3解释:最长连续递增序列是[1,3,5],长度为3......
  • Redis安装使用
    在开发网页的时候我们难免要发送短信做页面判断Redis就是一个外置存储仓库使用安装Redis安装百度云链接:https://pan.baidu.com/s/1Mvfaxw3J5SOg39V0aZOrHA提取码:n7......
  • SpringBoot系列之Redis实现消息队列
    1前言本教程主要讲解的是如何在SpringBoot中用Redis实现消息队列。学习本教程的前提知识点是有SpringBoot、Redis、消息队列等基础。所以默认各位大佬已经掌握以上知识点。......