72.SpringBoot1.x,2.x,2.xx中基于redis的分布式原子锁

文章目录

前言

基于redis的分布式锁因为其易操作的特性被广泛应用,最新的redis api都是支持.set(key, value, “NX”, “EX”, expireSeconds); // SET IF NOT EXIST,而且还是原子的
,操作成功,返回“OK”,否则返回null。伴随着redis的版本升级,springboot的版本升级,相对应的springboot版本中的原子锁使用方法会变化,本文主要是讲述
SpringBoot 1.x 2.x 2.xx中对应原子锁的使用~~

一.SpringBoot1.x操作:

.SpringBoot1.x 底层是jedis

//引入依赖

        
            com.tal.px
            jedis-spring-support
            1.0.0-SNAPSHOT
        
//注入
 @Resource
    private MergeJedisCmd jedisCmd;

//秒级别使用,支持px ms
jedisCmd.set(createKey(postId), "1", "NX", "EX", 5);
		
		
		
		

二.SpringBoot2.x:

SpringBoot2.x 底层是lettuce客户端,需要单独引入jedis的客户端2.x

//引入依赖
 
            redis.clients
            jedis
            2.9.3
        
	
//基于s级别的加锁.支持px ms		
 public boolean setRedisLock(String key, int expireSecond) {

        try {
            RedisCallback callback = (connection) -> {
                JedisCommands commands = (JedisCommands) connection.getNativeConnection();
                return commands.set(key, "1", "NX", "EX", expireSecond);
            };
            String result = (String) redisTemplate.execute(callback);
            return !StringUtils.isEmpty(result);
        } catch (Exception e) {
            logger.error("setRedis redis occured an exception", e);
        }
        return false;
    }	


三.SpringBoot2.3.0.RELEASE:

SpringBoot2.xx 2.3.0.RELEASE 底层就是lettuce客户端,需要单独引入jedis的客户端3.x

	
		
			org.springframework.boot
			spring-boot-starter-data-redis
			
				
				
					io.lettuce
					lettuce-core
				
			
		
//引入依赖,跟着springboot走,使用的jedis版本为jedis-3.3.0

			redis.clients
			jedis
		
//使用
 @Resource
    private RedisTemplate redisTemplate;
    @Resource
    public SetParams setParams;



//完成方法封装
public boolean setRedisLock(String key, int expireSecond) {

        try {
            RedisCallback callback = (connection) -> {
                JedisCommands commands = (JedisCommands) connection.getNativeConnection();
                //如果jedis和redis的版本号冲突或者连接池配置有误,此处报错
                return commands.set(key, "1",setParams.nx().ex(expireSecond));

            };
            String result = (String) redisTemplate.execute(callback);
            return !StringUtils.isEmpty(result);
        } catch (Exception e) {
            logger.error("setRedis redis occured an exception", e);
        }
        return false;
    }

总结

上面就是我梳理SpringBoot中的redis分布式锁的应用,如果你刚好再应用分布式锁的话参考我的总结吧,如果你想跟我更多的交流,欢迎关注留言转发。

展开阅读全文

页面更新:2024-04-30

标签:分布式   原子   使用方法   底层   前言   版本号   加锁   客户端   特性   冲突   本文   级别   留言   版本   操作   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top