redisson在redis基础之上,用来控制redis一系列的工具的集合,这些工具是在java的接口实现的。比如说juc、MQ、消息队列(一系列工具的集合)
要实现分布式锁,可以在redis服务器实现,也可以在java项目的工具类上实现。
1、Redisson实现了juc的lock锁,并且可以在分布式的redis环境下使用
juc的可重锁
上篇文章:redis自带的分布式锁,是jvm的一条或者多条线程。
这里redisson框架使用的juc的锁是指分布式环境下的一个或多个redis操作连接。
@Autowired
RedisUtil redisUtil;
@RequestMapping("testRedisson") // 访问http://redisTest/testRedisson,先把host文件的localhost本地地址解析成redisTest
@ResponseBody //再配置nginx代理本地地址redisTest,并去端口
public String testRedisson(){
//防压力测试代码,未加分布式锁,测试是否有重复的v
//当很多条线程高压力的访问的时候,就很容易出现异常,导致v重复!!!!
Jedis jedis = redisUtil.getJedis();
String v = jedis.get("k");
if(StringUtils.isBlank(v)){
v="1";
}
System.out.println("v值:"+v);
jedis.set("k",(Integer.parseInt(v)+1)+"");
jedis.close();
return "success";
}
防压力测试代码,未加分布式锁,测试是否有重复的v,当很多条线程高压力的访问的时候,就很容易出现异常,导致v重复!!!!这里就是,v重复了!
2、上边的是单个端口服务的手动的压力测试,有点low。接下来配置nginx的负载均衡,并启动多例模式(即多个端口服务),由apache来压力测试nginx!
(1)设置非单例模式启动
(2)启动三个redisson测试服务端口
8180端口服务启动成功:
8181端口服务启动成功:
8182端口服务启动成功:
(3)配置nginx:
这里有一个严重bug,就是忘记配置host文件了,127.0.0.1本地ip地址需要被redisTest解析,否则nginx.conf文件的配置地址:redisTest解析不了127.0.0.1本地ip,不生效!!!
(4)配置nginx的负载均衡:
(5)测试:
输入url:http://redistest/testRedisson(刷新请求18次)
控制台打印信息(nginx的负载均衡把18请求均衡给这三个端口,每个端口拿到6个请求):