redis分布式锁+线程池

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,倚天版 1GB 1个月
简介: redis分布式锁+线程池
@SpringBootTest
@Slf4j
public class TestDo {
    @Resource
    private RedisUtil redisUtil;
    private ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    @Test
    public void test() {
        List<Long> idList = new LinkedList<>();
        for (int i = 0; i < 10; i++) {
            idList.add(Long.valueOf(i));
        }
        for (Long shopId : idList) {
            if (null == shopId) {
                continue;
            }
            String redisLock = "test:demo:" + shopId;
            String value = redisUtil.get(redisLock, String.class);
            log.info("value:{}", value);
            if (Objects.equals(value, shopId.toString())) {
                continue;
            }
            redisUtil.set(redisLock, shopId.toString());
            log.info("shopId:{}", shopId);
            scheduledExecutorService.execute(() -> {
                try {
                    String threadName = Thread.currentThread().getName();
                    long threadId = Thread.currentThread().getId();
                    log.info("线程名称为threadName:{},线程id为threadId:{}",threadName,threadId);
                    String startDate = formatter.format(new Date());
                    //模拟业务
                    try {
                        //5秒
                        log.info("start===");
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        log.error("e:{}", e);
                    }
                    String endDate = formatter.format(new Date());
                } catch (Exception e) {
                    log.error("threadPool.execute:", e);
                } finally {
                    //释放锁
                    redisUtil.deleteCache(redisLock);
                }
            });
        }
    }
}

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
18天前
|
缓存 NoSQL 关系型数据库
(八)漫谈分布式之缓存篇:唠唠老生常谈的MySQL与Redis数据一致性问题!
本文来聊一个跟实际工作挂钩的老生常谈的问题:分布式系统中的缓存一致性。
72 10
|
22天前
|
消息中间件 缓存 NoSQL
Redis快速度特性及为什么支持多线程及应用场景
Redis快速度特性及为什么支持多线程及应用场景
58 11
|
20天前
|
NoSQL 算法 Java
(十三)全面理解并发编程之分布式架构下Redis、ZK分布式锁的前世今生
本文探讨了从单体架构下的锁机制到分布式架构下的线程安全问题,并详细分析了分布式锁的实现原理和过程。
|
26天前
|
存储 缓存 NoSQL
Redis性能优化问题之优化 Redis fork 耗时严重的问题,如何解决
Redis性能优化问题之优化 Redis fork 耗时严重的问题,如何解决
|
4天前
|
NoSQL Java Redis
Redis字符串数据类型之INCR命令,通常用于统计网站访问量,文章访问量,实现分布式锁
这篇文章详细解释了Redis的INCR命令,它用于将键的值增加1,通常用于统计网站访问量、文章访问量,以及实现分布式锁,同时提供了Java代码示例和分布式锁的实现思路。
12 0
|
12天前
|
NoSQL 关系型数据库 MySQL
简述redis的单线程模式
简述redis的单线程模式
|
20天前
|
数据采集 存储 NoSQL
Redis 与 Scrapy:无缝集成的分布式爬虫技术
Redis 与 Scrapy:无缝集成的分布式爬虫技术
|
1天前
|
Java
多线程线程同步
多线程的锁有几种方式
|
9天前
|
调度 Python
|
11天前
|
安全 算法 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(下)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
49 6