redis分布锁Redisson性能测试
来源:互联网 发布:安徽建筑大学网络教育 编辑:程序博客网 时间:2024/05/16 17:55
综述
redisson是一个用于连接Redis的Java客户端工作,相对于jedis,是一个采用异步模型,大量使用netty promise编程的客户端框架,需要测试性能。
代码
import java.util.concurrent.CountDownLatch;import org.redisson.Config;import org.redisson.Redisson;import org.redisson.RedissonClient;import org.redisson.core.RAtomicLong;import org.redisson.core.RLock;/** * redis的分布式锁测试 * @author zhaoyq */public class RedissonPerformanceTest { private static int TOTAL_PRE_THREADS = 10; private static long SECONDS = 10; protected static boolean isSkipLock = false; public static void main(String[] args) { Config config = new Config(); // for single server config.useSingleServer() .setAddress("10.10.208.32:7003") .setConnectionPoolSize(10); final RedissonClient redissonCli = Redisson.create(config); final RLock lock = redissonCli.getLock("testLock"); final CountDownLatch startLatch = new CountDownLatch(1); final CountDownLatch endLatch = new CountDownLatch(TOTAL_PRE_THREADS); Thread[] threads = new Thread[TOTAL_PRE_THREADS]; setZero(redissonCli); for (int i = 0; i < TOTAL_PRE_THREADS; i++) { PerformanceThread runningThread = new PerformanceThread(startLatch,endLatch,lock,redissonCli); runningThread.start(); threads[i]=runningThread; } //开始执行 startLatch.countDown(); try { Thread.sleep(SECONDS*1000); } catch (InterruptedException e) { e.printStackTrace(); } for (int i = 0; i < threads.length; i++) { PerformanceThread runningThread =(PerformanceThread)threads[i]; runningThread.stopThrad(); } try { endLatch.await(); } catch (InterruptedException e1) { e1.printStackTrace(); } printCount(redissonCli); redissonCli.shutdown(); } public static class PerformanceThread extends Thread{ private volatile boolean isRunning = true; private CountDownLatch startLatch ; private CountDownLatch endLatch; private RLock lock; private RedissonClient redissonCli; private PerformanceThread(CountDownLatch startLatch ,CountDownLatch endLatch,RLock lock ,RedissonClient redissonCli){ this.startLatch = startLatch; this.endLatch = endLatch; this.lock = lock; this.redissonCli =redissonCli; } @Override public void run() { try { startLatch.await(); } catch (InterruptedException e1) { e1.printStackTrace(); } while (isRunning) { try { if (!isSkipLock) { lock.lock(); } testUpdate(redissonCli); } catch (Exception e) { e.printStackTrace(); } finally { try { if (!isSkipLock) { lock.unlock(); } } catch (Exception e) { e.printStackTrace(); } } } endLatch.countDown(); } public void stopThrad(){ isRunning = false; } } /** * 更新对应的记录 */ public static void testUpdate(RedissonClient redissonCli) { RAtomicLong addLong = redissonCli.getAtomicLong("test_performance"); long totalUsed = addLong.addAndGet(1); } /** * 最后获得总数 * @param redissonCli */ public static void printCount(RedissonClient redissonCli){ RAtomicLong addLong = redissonCli.getAtomicLong("test_performance"); System.out.println("count tps is:"+(addLong.get()/SECONDS)); } /** * 初始化 * @param redissonCli */ public static void setZero(RedissonClient redissonCli){ RAtomicLong addLong = redissonCli.getAtomicLong("test_performance"); addLong.set(0); }}
- 1
- 2
- 3
- 4
- 5
- 6
总结分析
- isSkipLock为false运行开启分布式锁,压力测试tps在300笔左右
- isSkipLock为true关闭分布式锁,tps在1万笔左右
- redisson在各种异常的情况下很强壮,比如非正常关闭等,但是性能确实有比较大的损耗,后续比较下其他实现方案或者看看代码看有什么需要优化的
- 后续采用异步回调的方式看看分布式锁的性能是否有提高
0 0
- redis分布锁Redisson性能测试
- redis分布锁Redisson性能测试
- redis分布式锁redisson(下)
- redis客户端 Redisson
- redis客户端redisson实战
- Redis客户端Redisson中分布式锁RLock实现
- 基于Redis实现分布式锁-Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 通过Redisson实现基于redis的分布式锁
- Redis分布式客户端-Redisson介绍
- Redis分布式客户端-Redisson介绍
- Redis分布式客户端-Redisson介绍
- redis-benchmark 测试redis性能
- redis性能测试(redis-benchmark)
- Redis-benchmark测试Redis性能
- Servlet学习笔记六——会话跟踪
- java中方法的定义
- c++ 文件存取
- JS把字符串转换成Date类型
- Android异步相关源码详细分析(Handler、Message、Looper、MessageQueue)
- redis分布锁Redisson性能测试
- 雪城大学信息安全讲义 五、竞态条件
- 钢条切割--动态规划--算法导论
- 51Nod-算法马拉松23 B 谷歌的恐龙 [概率期望]【数学】
- MarkDown的使用
- Problem C: 默认参数:求圆面积
- 冒泡排序在单链表中的使用详解
- Android主题换肤 无缝切换
- Android快速实现热更新