Redission分布式-控制用户进行点赞操作

   在点赞的操作中,用到redission分布式锁,主要目的是确保在高并发环境下,对用户进行点赞操作进行控制,保证点赞操作的,安全、有序地进行,避免不一致或者重复点赞的情况。

流程:首先需要引入redission相关依赖,然后配置redission客户端,以便可以连接到redission服务器并获取锁的对象,最后在方法中进行代码实现相关操作,需要根据自己的需求和习惯定义一个key,然后以此作为key获取锁,获取锁的同时可以给锁设置一个等待和持续的时间,如果获取到锁了就走if,否则就走else,获取到锁了进行相关操作即可,最后操作完成一定要释放锁,否则会出现死锁的情况。

1.引入redission相关依赖

<!-- Maven依赖示例 -->  
<dependency>  
    <groupId>org.redisson</groupId>  
    <artifactId>redisson</artifactId>  
    <version>最新版本号</version> <!-- 请替换为实际使用的最新版本号 -->  
</dependency>

2.编写redission客户端配置

@Configuration  
public class RedissonConfig {  
  
    @Bean(destroyMethod="shutdown")  
    public RedissonClient redissonClient() {  
        Config config = new Config();  
        config.useSingleServer().setAddress("redis://127.0.0.1:6379"); // 替换为你的Redis服务器地址和端口  
        // 如果Redis服务器设置了密码,还需要调用setPassword方法设置密码  
        // config.useSingleServer().setPassword("yourpassword");  
        return Redisson.create(config);  
    }  
}

3.使用分布式锁进行点赞控制

@Autowired  
private RedissonClient redissonClient;  
  
public void likeBlog(int blogId, int userId) {  
    // 定义锁的key,这里可以根据业务需要来定义,比如使用"blogId:userId"作为key  
    String lockKey = "blogLike:" + blogId + ":" + userId;  
    RLock lock = redissonClient.getLock(lockKey);  
  
    // 尝试获取锁,这里设置了等待时间和锁持有时间  
    boolean isLocked = lock.tryLock(10, 10, TimeUnit.SECONDS); // 等待时间10秒,锁持有时间10秒  
    if (isLocked) {  
        try {  
            // 在这里执行点赞的逻辑,比如更新数据库中的点赞记录  
            // ...  
  
            // 模拟点赞成功  
            System.out.println("点赞成功");  
        } catch (Exception e) {  
            // 处理异常  
            e.printStackTrace();  
        } finally {  
            // 释放锁  
            lock.unlock();  
        }  
    } else {  
        // 获取锁失败,可以返回错误或进行其他处理  
        System.out.println("获取锁失败,请稍后再试");  
    }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值