第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定

Lettuce和Jedis的基準(zhǔn)測試

標(biāo)簽:
React.JS

1.准备工作

本地需要安装Redis,使用JMH做基准测试的框架:

<dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-core</artifactId>
    <version>1.21</version></dependency><dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-generator-annprocess</artifactId>
    <version>1.21</version>
    <scope>provided</scope></dependency>

项目添加Jedis和Lettuce的依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version></dependency><dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>5.0.3.RELEASE</version></dependency>

如果你对JMH不是很熟悉,建议你去看看Code Tools: jmh,和samples

2.编写测试代码

2.1 Jedis

@BenchmarkMode(Mode.Throughput)@Warmup(iterations = 1)@Threads(100)@State(Scope.Thread)@Measurement(iterations = 2, time = 600, timeUnit = TimeUnit.MILLISECONDS)@OutputTimeUnit(TimeUnit.MILLISECONDS)public class JedisStudy {    private static final int LOOP = 1;    private Jedis jedis;    @Setup
    public void setup() {
        jedis = new Jedis("127.0.0.1", 6379);
    }    @Benchmark
    public void get() {        for (int i = 0; i < LOOP; ++i) {
            jedis.get("a");
        }
    }
}
public static void main(String[] args) throws RunnerException {
    Options options = new OptionsBuilder().include(JedisStudy.class.getSimpleName())
            .output("benchmark/jedis-Throughput.log").forks(1).build();    new Runner(options).run();
}

这里用到的注解,其中@OutputTimeUnit(TimeUnit.MILLISECONDS)很容易理解,就是测试结果的单位,@Threads(100)是开启多少个线程测试;@Warmup(iterations = 1)是预热的循环次数;@BenchmarkMode(Mode.Throughput)是测试的模式,可以测试吞吐,延时等;@Measurement(iterations = 2, time = 600, timeUnit = TimeUnit.MILLISECONDS)是测试的循环次数,以及时长;其中比较难以理解的就是@State(Scope.Thread),这里我简单描述下吧,@State(Scope.Thread)和下面的@Setup配合使用,意思是每个测试线程,都会使用独立的一个变量,这个变量就是Jedis jedis,使用@Setup所修饰的方法来做初始化。

参考JMHSample_03_States JMHSample_04_DefaultState

其中因为Jedis是线程不安全的,所以每个线程使用的都是一个单独的Jedis对象,这里可以使用Pool来优化,读者如果感兴趣,可以尝试。

2.2 Lettuce

@BenchmarkMode(Mode.Throughput)@Warmup(iterations = 1)@Threads(100)@State(Scope.Benchmark)@Measurement(iterations = 2, time = 600, timeUnit = TimeUnit.MILLISECONDS)@OutputTimeUnit(TimeUnit.MILLISECONDS)public class LettuceAsyncStudy {    private static final int LOOP = 1;    private StatefulRedisConnection<String, String> connection;    @Setup
    public void setup() {
        RedisClient client = RedisClient.create("redis://localhost");
        connection = client.connect();
    }    @Benchmark
    public void get() throws ExecutionException, InterruptedException {
        RedisAsyncCommands<String, String> commands = connection.async();
        List<RedisFuture<String>> redisFutureList = new ArrayList<>();        for (int i = 0; i < LOOP; ++i) {
            RedisFuture<String> future = commands.get("a");
            redisFutureList.add(future);
            future.get();
        }
        redisFutureList.forEach(f -> {            try {
                f.get();
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
    }
}
public static void main(String[] args) throws RunnerException {
    Options options = new OptionsBuilder().include(LettuceAsyncStudy.class.getSimpleName())
            .output("benchmark/lettuceAsync-Throughput.log").forks(1).build();    new Runner(options).run();
}

这里和上面Jedis的区别就是@State(Scope.Benchmark),其实就是StatefulRedisConnection<String, String> connection这个对象是所有测试线程共享的,因为Lettuce的StatefulRedisConnection是线程的安全的,所以可以这么用。

3.测试结果

Client线程数(并发数)每次测试方法里循环执行get的次数Throughput(ops/ms)
Jedis100146.628
Lettuce1001106.589
--------
Jedis100105.307
Lettuce1001014.802
--------
Jedis1001000.483
Lettuce1001001.599



作者:我是杨正
链接:https://www.jianshu.com/p/7a1f8c69a8cb


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消