Redis处理⾼并发 实现分布式锁

news2024/11/25 22:59:12

Redisson

Redisson是架设在Redis基础上的⼀个Java驻内存数据⽹格(In-Memory Data Grid)。 Redisson在基于NIONetty框架上,充分的利⽤了Redis键值数据库提供的⼀系列优势,在Java实⽤⼯具包中常⽤ 接⼝的基础上,为使⽤者提供了⼀系列具有分布式特性的常⽤⼯具类。使得原本作为协调单机多线程并发程序的⼯ 具包获得了协调分布式多机多线程并发系统的能⼒,⼤⼤降低了设计和研发⼤规模分布式系统的难度。同时结合各 富特⾊的分布式服务,更进⼀步简化了分布式环境中程序相互之间的协作。

Redisson使⽤

1.引⼊分布式锁的⼯具类 redisson 依赖。
<!-- 实现分布式锁的工具类 -->
<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson</artifactId>
  <version>3.17.7</version>
</dependency>
<!-- Spring操作Redis的工具类 -->
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-redis</artifactId>
  <version>2.3.2.RELEASE</version>
</dependency>
<!-- Redis客户端 -->
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.9.0</version>
</dependency>
<!-- JSON解析工具 -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.13.4</version>
</dependency>

2.com.yx.config包下创建RedissonConfig配置类,初始化RedissonClient客户端。

package com . yx . config ;
import org . redisson . Redisson ;
import org . redisson . api . RedissonClient ;
import org . redisson . config . Config ;
import org . springframework . context . annotation . Bean ;
import org . springframework . context . annotation . Configuration ;
@Configuration
public class RedissonConfig {
/** Redis 单机模式 */
@Bean
public RedissonClient singletonModeRedisson () {
Config config = new Config ();
// 使⽤ "redis://" 来启⽤ SSL 连接
config . useSingleServer (). setAddress ( "redis://192.168.230.131:6379" ). setDatabase ( 0 );
return Redisson . create ( config );
}
/** Redis 集群模式 */
/*
@Bean
public RedissonClient clusterModeRedisson() {
Config config = new Config();
config.useClusterServers()
.setScanInterval(2000) // 群集状态扫描间隔(毫秒)
.addNodeAddress("redis://192.168.230.131:6379",
"redis://192.168.230.132:6379", "redis://192.168.230.133:6379");
return Redisson.create(config);
}
*/
/** Redis 哨兵模式 */
/*
@Bean
public RedissonClient sentinelModeRedisson() {
Config config = new Config();
config.useSentinelServers()
.setMasterName("myMaster")
com.yx.config 包下创建 RedissonConfig 配置类,初始化 RedissonClient 客户端。
以下提供了4种方式配置
package com;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
    /** Redis单机模式 */
    @Bean
    public RedissonClient singletonModeRedisson() {
        Config config = new Config();
        // 使⽤"redis://"来启⽤SSL连接                                   //使用的是哪个数据库
     config.useSingleServer().setAddress("redis://192.168.48.67:6379").setDatabase(0);
        return Redisson.create(config);
    }
/** Redis集群模式 */
 /*
 @Bean
 public RedissonClient clusterModeRedisson() {
 Config config = new Config();
 config.useClusterServers()
 .setScanInterval(2000) // 群集状态扫描间隔(毫秒)
 .addNodeAddress("redis://192.168.230.131:6379",
"redis://192.168.230.132:6379", "redis://192.168.230.133:6379");
 return Redisson.create(config);
 }
 */
/** Redis哨兵模式 */

// @Bean
// public RedissonClient sentinelModeRedisson() {
// Config config = new Config();
// config.useSentinelServers()
// .setMasterName("myMaster").addSentinelAddress("redis://192.168.230.131:6379",
//"redis://192.168.230.132:6379", "redis://192.168.230.133:6379");
// return Redisson.create(config);
// }

    /** Redis主从模式 */

// @Bean
// public RedissonClient masterSlaveModeRedisson() {
// Config config = new Config();
// config.useMasterSlaveServers()
// // 主服务器IP
// .setMasterAddress("redis://192.168.230.131:6379")
// // 从服务器IP
// .addSlaveAddress("redis://192.168.230.132:6379",
//"redis://192.168.230.133:6379");
// return Redisson.create(config);
// }

}

在maven环境中还要如下配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation=" http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
<!--    包扫面-->
    <context:component-scan base-package="com"></context:component-scan>
<!--连接工厂-->
    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
    <property name="hostName" value="192.168.48.67"></property>
    <property name="port" value="6379"></property>
   </bean>
<!--Redis操作模板类-->
    <bean id="stringRedisTemplate"
          class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="connectionFactory"/>
    </bean>

</beans>

 在web.xml中进行如下配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:/Spring/Spring.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!-- 处理中文乱码的问题 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/701421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高压功率放大器在光学测量中的应用有哪些

高压功率放大器在光学测量中有许多应用&#xff0c;例如在激光器和LED驱动、光电探测器和光电转换器中等。这些应用大多需要将输入信号放大到高电平输出&#xff0c;以便驱动高电压或大功率负载。 在激光器和LED驱动应用中&#xff0c;高压功率放大器可以将低电平的控制信号放大…

nginx纳入skywalking调用链监控

nginx纳入skywalking调用链监控 一、说明二、nginx部署2.1 OpenResty介绍2.2 准备SkyWalking Nginx Agent2.3 docker方式部署OpenResty2.3.1 修改配置文件2.3.2 启动OpenResty容器 2.4 验证 一、说明 服务器中已部署好skywalking&#xff0c;并将tomcat纳入skywalking监控(tom…

JavaSE基础语法--接口

接口在现实生活中比比皆是。比如电脑的USB接口&#xff0c;插座的接口。这些接口我们发现都是一样的规范。比如插座的有双孔插&#xff0c;有三孔插。那么对应就有双脚设备&#xff0c;和三脚的设备。从这我们就能摸清楚规律&#xff1a;接口就是统一规范的提供服务。Java中接口…

七年老Android推荐 : 日常开发中好用的工具 (二)

1. 前言 作为一名拥有七年经验的Android开发工程师&#xff0c;在日常开发中&#xff0c;总希望能提升自己的开发效率&#xff0c;对此也积累了一些工具&#xff0c;本文对此总结了一些好用的工具。 2. draw.io draw.io用来编写流程图非常好用&#xff0c;是一个免费的在线图…

Splunk Enterprise 9.1.0 (macOS, Linux, Windows) - 机器数据管理和分析

Splunk Enterprise 9.1.0 (macOS, Linux, Windows) - 机器数据管理和分析 请访问原文链接&#xff1a;https://sysin.org/blog/splunk-9/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 混合世界的数据平台 快速、大规模地从…

【海思SS528】MPP媒体处理软件V5.0 | 音频模块 - 学习笔记

目录 &#x1f384;一、概述&#x1f384;二、音频输入(AI) 和 音频输出(AO)✨2.1 音频接口和 AI、 AO 设备✨2.2 录音和播放原理✨2.3 AI、AO 通道✨2.4 重采样 &#x1f384;三、音频编码和解码✨3.1 音频编解码流程✨3.2 音频编解码协议✨3.3 语音帧结构 &#x1f384;四、总…

【Spring | 事件监听概述】

本篇主要对Spring 的 事件监听机制简单介绍下。 事件监听 概述 概述 ApplicationContext中的事件处理是通过ApplicationEvent 类和ApplicationListener接口提供的。如果将实现该 ApplicationListener 接口的 bean 部署到上下文中&#xff0c;那么每当 ApplicationEvent 发布到 …

Android Jetpack Compose - 深入了解 AlertDialog

在开发 Android 应用时&#xff0c;对话框是一个常见的 UI 元素&#xff0c;用于向用户显示信息或获取用户的反馈。在 Jetpack Compose 中&#xff0c;我们可以使用 AlertDialog 组件来创建对话框。在这篇博客中&#xff0c;我们将深入了解如何使用 Jetpack Compose 的 AlertDi…

【Python爬虫+数据分析】采集电商平台数据信息,并做可视化演示(带视频案例)

前言 随着电商平台的兴起&#xff0c;越来越多的人开始在网上购物。而对于电商平台来说&#xff0c;商品信息、价格、评论等数据是非常重要的。因此&#xff0c;抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。 接下来就让我来教你 如何使用Python编写…

互动酷投票平台网络投票链接做网络链接投票

关于微信投票&#xff0c;我们现在用的最多的就是小程序投票&#xff0c;今天的网络投票&#xff0c;在这里会教大家如何用“活动星投票”小程序来进行投票。 我们现在要以“垃悦享端午”为主题进行一次投票活动&#xff0c;我们可以在在微信小程序搜索&#xff0c;“活动星投票…

ProtoBuf—3

文章目录 1、默认值2、更新规则3、未知字段4、option字段5、通信录网络版6、总结 1、默认值 反序列化消息时&#xff0c;如果被反序列化的二进制序列中不包含某个字段&#xff0c;反序列化对象中相应字段时&#xff0c;就会设置为该字段的默认值。不同的类型对应的默认值不同&…

使用GeoPandas进行地理空间数据可视化

大家好&#xff0c;在当今数据驱动的世界中&#xff0c;将信息可视化到地图上可以提供有价值的见解&#xff0c;帮助有效地传达复杂的模式。GeoPandas是一个建立在pandas和shapely之上的Python库&#xff0c;使用户能够通过将地理空间数据与各种变量合并来创建令人惊叹的地图。…

css实现鼠标悬停时滑出层提示

css实现鼠标悬停时滑出层提示的方法介绍 这是一个简单的鼠标悬停提示特效&#xff0c;类似于alt标签&#xff0c;不过这一种是用纯CSS实现&#xff0c;扩展性好&#xff0c;而且在提示的层里可以加入图片或其它布局&#xff0c;这个要根据你的需要了。 代码如下: <!DOCTYPE…

一次日志配置未生效问题排查记录

某天排查业务问题时,在我司的日志收集平台上,未能发现相关业务服务接口访问日志。经过和相关同事确定,发现业务服务未能将接口访问日志吐到日志收集平台,由此开启一段有点漫长的排查之旅。 业务服务是典型的SpringBoot web应用&#xff0c;日志记录采用slf4jlog4j2组合。 通过…

《BlazePose: On-device Real-time Body Pose tracking》在移动设备端实时人体姿态追踪(2006)

BlazePose: On-device Real-time Body Pose tracking 论文地址&#xff1a;https://arxiv.org/pdf/2006.10204.pdf GoogleBolg&#xff1a;https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html 模型下载地址&#xff1a;https://github.com/PIN…

clop勒索软件攻击活动频发,西门子能源中招

自6月初被通报利用MOVEit Transfer服务器中的零日漏洞窃取加密组织数据后&#xff0c;clop勒索软件攻击活动频繁&#xff0c;全球陆续发生了多起clop软件攻击事件。本周&#xff0c;Clop团伙在其数据泄露网站上列出了西门子能源公司的信息&#xff0c;表示该公司的数据被泄露。…

must declare a single constructor

1、异常详细描述 Test ignored.org.junit.platform.commons.PreconditionViolationException: Class [org.bc.offer.datastructure.Stack] must declare a single constructorProcess finished with exit code -12、源码 package org.bc.offer.datastructure;import org.jun…

SUI Token释放计划时间表和几个相关问题

Sui主网于2023年5月3日正式上线&#xff0c;网络原生token SUI用于链上交易、支付gas费用、保护网络以及提供链上流动性。SUI的长期流通总供应量为100亿。在主网上线时&#xff0c;大约有5%的token在流通&#xff0c;其余的将按照下面的图表所示的计划释放&#xff0c;以保持网…

特异性抑制剂:FAPI-4 NH2 ,FAPI4Amine,成纤维细胞活化蛋白 (FAP) 抑制剂连接氨基

编辑来源||陕西新研博美生物科技有限公司小编MISSwu FAPI-4-NH2中FAPI是FAP的特异性抑制剂。在这些FAPI中&#xff0c;含有DOTA配体(FAPI-04)的[68Ga]Ga-DOTA-FAPI-04 PET/CT能显示出良好的体内药代动力学&#xff0c;导致快速kidney清除和注射后10分钟至3小时的低背景活性。 …

JAVA C++的权限区别

访问级别的名称和个数&#xff1a;在C中&#xff0c;有三个访问级别关键字&#xff1a;public、protected和private。而在Java中&#xff0c;有四个访问级别关键字&#xff1a;public、protected、private和默认&#xff08;没有关键字修饰&#xff09;。 默认访问级别不同&…