• FunTester框架Redis性能测试之map & INCR


    在先前的文章中,我首先做了FunTester框架Redis压测预备,然后分享了- FunTester测试框架Redis性能测试实践,对普通的key-value类型的Redis操作进行了测试。再加上- FunTester框架Redis性能测试之list操作一共产出了三篇文章,本来我的计划是通过多次不同的参数来对比Redis性能差异的,结果我发现其实没啥性能差异,都怪Redis性能太好了,我又不舍得拿本机测试极限性能。

    所以本期文章接直接分享性能测试案例,分为map操作性和INCR操作。

    map

    思路

    设计了一个简单的测试场景,用户先往某个值为map类型数据里面放一个key-value数据,然后查询这个key的value是否预期一致(其实有点多余),然后删除这个key。

    这个用例实在没想到具体的适用场景,就当我为了演示空想的用例。

    用例

    import com.funtester.base.constaint.FixedThread
    import com.funtester.base.constaint.ThreadBase
    import com.funtester.config.Constant
    import com.funtester.db.redis.RedisBase
    import com.funtester.frame.execute.Concurrent
    import com.funtester.utils.StringUtil
    
    import java.util.concurrent.atomic.AtomicInteger
    
    /**
     * FunTester测试框架,Redis压测,map
     */
    class RedisList05 extends RedisBase {
    
        static AtomicInteger num = new AtomicInteger(0)
    
        static RedisBase drive
    
        public static void main(String[] args) {
            String host = "FunTester"
            int port = 6379
            drive = new RedisBase(host, port)
            drive.index = 2
            int times = 200
            int thread = 10
            Constant.RUNUP_TIME = 0
            def tester = new FunTester(times)
    
            def task = new Concurrent(tester, thread, "redis测试实践之map")
            task.start()
            drive.close()
        }
    
        private static class FunTester extends FixedThread {
    
            String key = DEFAULT_STRING + num.getAndIncrement()
    
            FunTester(int limit) {
                super(null, limit, true)
            }
    
            @Override
            protected void doing() throws Exception {
                def k = "f" + getNanoMark()
                def v = StringUtil.getString(10000)
                drive.hset(key, k, v)
                def hget = drive.hget(key, k)
                if (v != hget) fail()
                drive.hdel(key, k)
            }
    
            @Override
            ThreadBase clone() {
                return new FunTester(this.limit)
            }
        }
    
    }
    
    

    测试结果

    此处省略一千八百字和二百七十张图。

    INCR

    Redis Incr 命令将 key 中储存的数字值增一。而decr方式是数字值减一。这个可以设计成为两个用例。

    • 多线程对一个key进行递增操作,看是否线程安全
    • 多线程对一个可以进行等量递增和递减,看是否线程安全

    为了省事儿,我只演示第一种用例。

    用例

    
    import com.funtester.base.constaint.FixedThread
    import com.funtester.base.constaint.ThreadBase
    import com.funtester.config.Constant
    import com.funtester.db.redis.RedisBase
    import com.funtester.frame.execute.Concurrent
    
    import java.util.concurrent.atomic.AtomicInteger
    /**
     * FunTester测试框架,Redis压测,incr
     */
    class RedisList06 extends RedisBase {
    
        static AtomicInteger num = new AtomicInteger(0)
    
        static RedisBase drive
    
        public static void main(String[] args) {
            String host = "FunTester"
            int port = 6379
            drive = new RedisBase(host, port)
            drive.index =2
            int times = 200
            int thread = 20
            Constant.RUNUP_TIME = 0
            def tester = new FunTester(times)
    
            def task = new Concurrent(tester, thread, "redis测试实践之INCR")
            task.start()
            drive.close()
        }
    
        private static class FunTester extends FixedThread {
    
            String listName = DEFAULT_STRING + num.getAndIncrement()
    
            FunTester(int limit) {
                super(null, limit, true)
            }
    
            @Override
            protected void doing() throws Exception {
                drive.incr("FunTester1123")
            }
    
            @Override
            ThreadBase clone() {
                return new FunTester(this.limit)
            }
        }
    
    }
    
    
    

    测试结果

    此处省略一千八百字。

    incr结果验证

    总结

    FunTester测试框架对Redis的性能测试系列已经完结,下一步会写FunTester测试框架对MySQL进行压测的实践系列,敬请期待……

    Have Fun ~ Tester !

  • 相关阅读:
    Object-C,NSSet,不可变集合
    NYIST 860 又见01背包
    NYIST 1070 诡异的电梯【Ⅰ】
    HDU 1542 Atlantis
    HDU 4756 Install Air Conditioning
    CodeForces 362E Petya and Pipes
    HDU 4751 Divide Groups
    HDU 3081 Marriage Match II
    UVA 11404 Palindromic Subsequence
    UVALIVE 4256 Salesmen
  • 原文地址:https://www.cnblogs.com/FunTester/p/15357840.html
Copyright © 2020-2023  润新知