首页 > 数据库 >java——redis随笔——实战——优惠券秒杀

java——redis随笔——实战——优惠券秒杀

时间:2023-10-28 13:22:05浏览次数:38  
标签:优惠券 java redis long import now public

黑马视频地址:https://www.bilibili.com/video/BV1cr4y1671t?p=49&spm_id_from=pageDriver&vd_source=79bbd5b76bfd74c2ef1501653cee29d6

 

csdn地址:https://blog.csdn.net/weixin_50523986/article/details/131815165

 

 

 

 

 

 

 

 

 

 

  • stringRedisTemplate.opsForValue().increment函数:

 

package com.hmdp.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

@Component
public class RedisIdWorker {

    // 定义一个初始时间戳
    public static final long BEGIN_TIME = 1640995200L;

    // 序列号位数
    public static final long COUNT_BITS = 32;

    // 用到redis的自增长
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public long nextId(String keyPrefix){

        // 1 生成时间戳
        LocalDateTime now = LocalDateTime.now();
        long nowSecond = now.toEpochSecond(ZoneOffset.UTC);
        long timeStamp = nowSecond - BEGIN_TIME;

        // 2 生成序列号
        // 确定当天序列号的key 获取当天日期 精确到天
        String data = now.format(DateTimeFormatter.ofPattern("yyyy:MM:DD"));
        // 实现自增长
        long count = stringRedisTemplate.opsForValue().increment("icr:" + keyPrefix + data);

        // 3 拼接并返回  借助位运算
        // 移位之后后面32位全都是0 或运算可以保证原来的样子
        return timeStamp << COUNT_BITS | count;

    }

    public static void main(String[] args) {
//        LocalDateTime time = LocalDateTime.of(2022, 1, 1, 0, 0, 0);
//        long timeToSecond = time.toEpochSecond(ZoneOffset.UTC);
//        System.out.println(timeToSecond);

    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

1

标签:优惠券,java,redis,long,import,now,public
From: https://www.cnblogs.com/xiaobaibailongma/p/17794011.html

相关文章

  • 5款在线JavaScript加密混淆工具
    5款常用、好用的在线JavaScript加密混淆工具,网址请从截图中查看。1、jscrambler2、JShaman3、javascriptobfuscator4、freejsobfuscator5、jjencode......
  • Java中的Set集合
    Set集合的特点:不能存储相同元素。Set接口两大实现(常用):HashSetTreeSetSet是一个抽象接口,不能对Set进行实例化。(Setset=newSet();)错误该接口主要继承于Collection接口,所以具有Collection的一些常见的方法。1.add()向集合中添加元素,返回Boolean2.clear()  ......
  • 你知道Java21中的顺序集合吗?
    在Java21中,处理集合的方式得到了改进,因为三个新的接口已经融入了现有的类型层次结构。这些顺序集合为我们提供了一个统一的API来访问第一个和最后一个元素,并以相反的顺序处理集合。为了更好地理解顺序集合是什么,让我们回顾一下集合之前的样子。Java集合框架在Java1.2中引入的C......
  • CentOS 7.9 Redis 设置开机自启动
    https://blog.csdn.net/aikudexiaohai/article/details/130102729一、背景说明由于安装的redis,不会自动生成systemctl相关的系统命令,每次启动、重启、停止、查看redis状态,不太方便。可以通过如下步骤,创建系统文件,可以通过标准的systemctl命令方便执行redis的相关操作。......
  • javaweb--多表查询
    多表查询:从多张表中查询数据内连接:相当于查询A、B两张表的交集隐式连接:selectt1.name,t1.id,t2.dnamefromepmt1,deptt2whereepm.name=dept.id外连接:左外连接是查找A表所有数据和AB表的交集select*fromt1joint2ont1.id=t2.id左外连接是查找B表所有数据和AB表的......
  • Java反序列化之URLDNS链
    Java反序列化之URLDNS链一、漏洞简介URLDNS链是java原生态的一条利用链,通常用于存在反序列化漏洞进行验证的,因为是原生态,不存在什么版本限制。该链有以下三个特点:不限制jdk版本,使用Java内置类,对第三方依赖没有要求目标无回显,可以通过DNS请求来验证是否存在反序列化漏洞URLD......
  • JAVA-EE在不使用MVC分层的情况下用一个servlet完成转账业务------Java-Web项目
    在不使用MVC分层的情况下用一个servlet完成转账业务packagecom.bjpowernode.Bank.servlet;importcom.bjpowernode.Bank.exception.AppException;importcom.bjpowernode.Bank.exception.MoneyNotEnoughException;importcom.bjpowernode.oa.utils.DBUtil;importjakarta.ser......
  • Java 垃圾回收机制
    目录垃圾回收的基础知识堆空间的基本结构内存分配和回收原则对象优先在Eden区分配大对象直接进入老年代长期存活的对象将进入老年代GC分类对象是否可被回收引用计数算法可达性分析算法引用类型强引用(StrongReference)软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomRefere......
  • Java 音频处理,音频流转音频文件,获取音频播放时长
    1.背景最近对接了一款智能手表,手环,可以应用与老人与儿童监控,环卫工人监控,农场畜牧业监控,宠物监控等,其中用到了音频传输,通过平台下发语音包,发送远程命令录制当前设备音频并将音频分包传输到服务器上生成音频文件等。其中关于音频的一些简单操作封装成了工具包。2.音频工具包引入jaud......
  • 你知道Java21中的顺序集合吗?
    大家好,我是老七,点个关注吧,将持续更新更多精彩内容!在Java21中,处理集合的方式得到了改进,因为三个新的接口已经融入了现有的类型层次结构。这些顺序集合为我们提供了一个统一的API来访问第一个和最后一个元素,并以相反的顺序处理集合。为了更好地理解顺序集合是什么,让我们回顾一下集合......