redisson

高性能分布式锁-redisson的使用

≯℡__Kan透↙ 提交于 2019-11-29 08:14:31
1,概述:在一些高并发的场景中,比如秒杀,抢票,抢购这些场景,都存在对核心资源,商品库存的争夺,控制不好,库存数量可能被减少到负数,出现超卖的情况,或者 产生唯一的一个递增ID,由于web应用部署在多个机器上,简单的同步加锁是无法实现的,给数据库加锁的话,对于高并发,1000/s的并发,数据库可能由行锁变成表锁,性能下降会厉害。那相对而言,redis的分布式锁,相对而言,是个很好的选择,redis官方推荐使用的Redisson就提供了分布式锁和相关服务。 下面介绍下如何使用Redisson。 2,Redisson的使用方式十分简单,详见官方文档: https://github.com/redisson/redisson/wiki/2.-%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95 3,加入jar包的依赖: 1 2 3 4 5 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>2.7.0</version> </dependency> 4,配置Redisson public class RedissonManager { private static Config config = new Config(); /

redisson 分布式锁

不问归期 提交于 2019-11-29 06:54:44
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.11.3</version> </dependency> package morning.cat.redis.redisson; import org.junit.BeforeClass; import org.junit.Test; import org.redisson.Redisson; import org.redisson.api.RLock; import org.redisson.config.Config; import java.util.concurrent.TimeUnit; /** * @describe: 类描述信息 * @author: morningcat.zhang * @date: 2019/9/4 7:25 PM */ public class RedissonTest { private static Redisson redisson = null; @BeforeClass public static void init() { Config config = new Config(); config.useSingleServer().setAddress(

SpringBoot整合Redisson(集群模式)

孤街浪徒 提交于 2019-11-28 20:37:00
环境:SpringBoot2.x maven增加配置 <!-- redis--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--springboot2.0的redis整合包多出lettuce连接池,需要增加commons-pool2包1.5的版本默认采用的连接池技术是jedis 2.0以上版本默认连接池是lettucespring boot 2.0 的操作手册有标注 大家可以去看看 地址是:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle--><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version></dependency><dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.6.5<

CenOS 7 java链接redis数据库

梦想的初衷 提交于 2019-11-27 00:10:41
完整代码 public class App { public static void main(String[] args) { System.out.println("Hello World!"); //创建连接 Config config = new Config(); config.useSingleServer().setAddress("redis://192.168.1.109:6379");//设置链接地址 RedissonClient redisson = Redisson.create(config); RBucket<String> bucket = redisson.getBucket("simpleObject"); bucket.set("你的对象");//设置值 RMap<String,String>map = redisson.getMap("simpleMap"); map.put("mapKey","你的映射值");打印值 String objectValue = bucket.get(); System.out.println("储存的对象值是: "+objectValue);//设置值 String mapValue = map.get("mapKey"); System.out.println("储存的映射值"+mapValue);//打印值

基于注解的锁

爷,独闯天下 提交于 2019-11-26 21:15:09
/*--> */ /*--> */ /*--> */ /*--> */ Redisson分布式锁 之前的 基于注解的锁 有一种锁是基本redis的分布式锁,锁的实现我是基于redisson组件提供的RLock,这篇来看看redisson是如何实现锁的。 不同版本实现锁的机制并不相同 引用的redisson最近发布的版本3.2.3,不同的版本可能实现锁的机制并不相同,早期版本好像是采用简单的setnx,getset等常规命令来配置完成,而后期由于redis支持了脚本Lua变更了实现原理。 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.2.3</version> </dependency> setnx需要配合getset以及事务来完成,这样才能比较好的避免死锁问题,而新版本由于支持lua脚本,可以避免使用事务以及操作多个redis命令,语义表达更加清晰一些。 RLock接口的特点 继承标准接口Lock 拥有标准锁接口的所有特性,比如lock,unlock,trylock等等。 扩展标准接口Lock 扩展了很多方法,常用的主要有:强制锁释放,带有效期的锁,还有一组异步的方法。其中前面两个方法主要是解决标准lock可能造成的死锁问题。比如某个线程获取到锁之后

Redisson分布式锁

拜拜、爱过 提交于 2019-11-26 02:51:03
build.gradle compile 'org.redisson:redisson:3.11.4' application.properties spring . redis . host = 192.168 .10 .10 spring . redis . port = 6379 spring . redis . password = RedissonConfig.java /** * Redisson配置类 */ @Configuration public class RedissonConfig { @Value ( "${spring.redis.host}" ) private String host ; @Value ( "${spring.redis.port}" ) private String port ; @Value ( "${spring.redis.password}" ) private String password ; /** * 单机模式 * @return */ @Bean ( destroyMethod = "shutdown" ) public RedissonClient redissonClient ( ) { Config config = new Config ( ) ; SingleServerConfig