首页 > 数据库 >redis分布锁

redis分布锁

时间:2024-04-26 17:36:37浏览次数:17  
标签:redisson spring redis param 分布 key import

 

配置 Redisson 连接

在 Spring Boot 项目的配置文件 application.yml 中添加 Redisson 配置:

spring:
  data:
    redis:
      host: localhost
      port: 6379
      database: 0
redisson:
  codec: org.redisson.codec.JsonJacksonCodec
  single-server-config:
    address: "redis://${spring.data.redis.host}:${spring.redis.port}"
    database: "${spring.data.redis.database}"
    password: "${spring.data.redis.password}"

5.3 编写分布式锁代码类

import jakarta.annotation.Resource;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

@Service
public class RedissonLockService {
    @Resource
    private Redisson redisson;

    /**
     * 加锁
     *
     * @param key     分布式锁的 key
     * @param timeout 超时时间
     * @param unit    时间单位
     * @return
     */
    public boolean tryLock(String key, long timeout, TimeUnit unit) {
        RLock lock = redisson.getLock(key);
        try {
            return lock.tryLock(timeout, unit);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return false;
        }
    }

    /**
     * 释放分布式锁
     *
     * @param key 分布式锁的 key
     */
    public void unlock(String key) {
        RLock lock = redisson.getLock(key);
        lock.unlock();
    }
}

标签:redisson,spring,redis,param,分布,key,import
From: https://www.cnblogs.com/xianz666/p/18160507

相关文章

  • springboot链接redis IPV6
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion>......
  • Go+seata实现分布式事务-tcc
    上篇用的ta跟xa。这次试试tccclientpackagemainimport( "context" "flag" "fmt" "net/http" "time" "github.com/parnurzeal/gorequest" "github.com/seata/seata-go/pkg/client" "github.......
  • redis系列02---缓存过期、穿透、击穿、雪崩
    一、缓存过期问题产生的原由:内存空间有限,给缓存设置过期时间,但有些键值运气比较好,每次都没有被我的随机算法选中,每次都能幸免于难,这可不行,这些长时间过期的数据一直霸占着不少的内存空间!解决方案:redis提供8种策略供应用程序选择,用于我遇到内存不足时该如何决策:*noeviction:返......
  • Redis分布式锁
    Redis分布式锁如何实现?在Redis中提供了一个命令setnx(SETifnotexists)由于Redis的单线程的,用了命令之后,只能有一个客户端对某一个key设置值,在没有过期或删除key的时候是其他客户端是不能设置这个key的。如何控制Redis实现分布式锁有效时长呢?Redis的setnx指令不好控制这个......
  • redis相关
    redis是一种nosql数据库,sql是关系型数据库,nosql是非关系型数据库,一般以键值对、json、图数据库等为主sql中会存储包含外键的关系表,nosql更多以键值对嵌套形式来表示关系,缺点是没有约束容易重复。从查询语句上来说sql格式较为固定,优点是只要是关系型数据库都能用相同的sql语句查......
  • redis
    一、redis为什么快1.基于内存:内存读写效率远高于磁盘读写2.存储形式:键值对的内存数据库,哈希表结构O(1)时间复杂度可以获取值3.单线程:避免上下文切换4.IO多路复用:单个线程处理多个客户端链接5.编码:支持多种数据结构及编码,根据元素数量,有阀值,大于小于阀值的编码不......
  • Redis淘汰策略
    Redis过期策略有几种?Redis中提供八种过期策略,默认是noeviction,即不删除任何数据,当内存不足时会直接报错。可以在Redis的配置文件中进行设置。noeviction:不淘汰任何key,但是内存满时不允许写入新数据,默认就是这种策略。volatile-ttl:对设置了TTL的key,比较key的剩余TTL值,TTL越......
  • Go+seata实现分布式事务
    docker安装seataversion:'3'services:seata-server:image:seataio/seata-server:latestports:-"8091:8091"-"7091:7091"environment:-SEATA_PORT=8091-STORE_MODE=filemysql:ima......
  • Redis场景
    redis应用场景Redis在缓存和队列方面有着广泛的应用场景,下面详细介绍一下:缓存应用场景:页面缓存:在Web应用中,Redis可以用作页面缓存,存储页面渲染结果,以减轻数据库的压力,提高页面响应速度。当用户请求某个页面时,首先检查Redis中是否存在该页面的缓存,如果存在则直接返回缓......
  • redis安装及使用
    Redis与传统数据库的一个主要区别在于,Redis把所有数据都存储在内存中,而传统数据库通常只会把数据的索引存储在内存中,并将实际的数据存储在硬盘中。为了满足不同的持久化需求,Redis提供了RDB持久化、AOF持久化和RDB-AOF混合持久化等多种持久化方式以供用户选择。如果用户有需要,也......