/ToolGood.AntiDuplication

当网络波动时,可防重复提交

Primary LanguageC#MIT LicenseMIT

ToolGood.AntiDuplication

欢迎使用ToolGood.AntiDuplicationToolGood.AntiDuplication 是一款轻量级防重复提交组件。

快速上手

	private readonly static AntiDupCache<int, int> antiDupCache = new AntiDupCache<int, int>(50, 1);
	private readonly static AntiDupQueue<int, int> antiDupQueue = new AntiDupQueue<int, int>(50);
	private readonly static DictCache<int, int> dictCache = new DictCache<int, int>();

	antiDupCache.GetOrAdd(key, () => {
		....
		return val;
	});

	antiDupQueue.GetOrAdd(key, () => {
		....
		return val;
	});

	dictCache.GetOrAdd(key, () => {
		....
		return val;
	});

注意:AntiDupCacheAntiDupQueueDictCache类的GetOrAdd方法中的key不要设置为nullkey为null时,不缓存值。

注意:DictCache需要手动调用Clear方法清空缓存。

性能:

----------------------- 测试缓存性能 从1到100 重复次数:10000 单位: ms -----------------------
    并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
AntiDupCache: 275  221  263  254  263  259  243  269  272  255  257  278
AntiDupQueue: 114  119  122  142  143  136  144  148  142  168  173  166
   DictCache: 109  117  120  138  139  127  145  150  160  161  160  193
       Cache: 91   96   122  113  103  121  125  123  133  128  156  149

----------------------- 仿线上环境  从1到1000  单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 1891 957  641  476  383  318  278  241  218  199  187  164
  AntiDupCache: 1868 959  632  481  380  319  269  241  215  195  193  163
  AntiDupQueue: 1897 947  629  477  383  321  273  241  212  195  187  162
     DictCache: 1897 954  639  470  382  318  277  239  215  195  187  163
         Cache: 1888 1897 1901 1871 1892 1879 1850 1845 1860 1830 1812 1909
第二次普通并发: 1950 977  646  476  375  327  278  244  218  190  191  161

----------------------- 开始  从1到100   重复次数:1 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 185  95   62   46   40   39   28   29   22   21   20   20
  AntiDupCache: 188  93   64   45   39   39   28   28   22   20   18   22
  AntiDupQueue: 190  93   61   47   37   36   29   29   22   19   18   23
     DictCache: 186  95   64   46   37   37   29   30   19   19   18   21
         Cache: 191  191  184  186  188  186  181  185  187  186  186  180
第二次普通并发: 185  93   60   48   34   36   28   30   22   19   17   20

----------------------- 开始  从1到100   重复次数:2 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 373  188  126  91   75   62   59   48   45   36   37   59
  AntiDupCache: 187  96   63   48   37   34   29   26   23   19   18   24
  AntiDupQueue: 191  95   63   47   38   33   29   25   20   17   18   23
     DictCache: 190  96   65   47   39   32   28   22   23   19   18   23
         Cache: 179  190  181  185  188  186  182  180  178  182  180  180
第二次普通并发: 374  183  128  94   72   63   60   46   40   36   37   41

----------------------- 开始  从1到100   重复次数:3 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 555  283  194  144  113  95   87   77   67   55   56   45
  AntiDupCache: 187  94   64   46   39   34   27   28   23   18   18   16
  AntiDupQueue: 181  92   66   45   37   38   30   29   24   20   18   14
     DictCache: 187  95   67   47   38   32   29   23   22   19   18   15
         Cache: 183  188  186  191  188  185  183  186  183  182  182  174
第二次普通并发: 559  282  192  141  113  94   90   77   66   55   56   45

----------------------- 开始  从1到100   重复次数:4 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 744  379  250  193  155  131  111  94   93   83   73   70
  AntiDupCache: 188  95   65   42   40   34   29   25   22   19   18   19
  AntiDupQueue: 193  93   66   44   41   34   30   26   20   18   20   20
     DictCache: 187  96   65   47   37   31   28   26   21   20   19   19
         Cache: 183  185  187  190  181  187  181  181  179  182  177  179
第二次普通并发: 745  375  255  185  155  127  106  92   90   75   74   67

----------------------- 开始  从1到100   重复次数:5 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 925  473  317  236  191  162  138  120  110  94   90   91
  AntiDupCache: 189  94   65   48   37   35   29   26   21   19   18   19
  AntiDupQueue: 193  93   65   47   37   34   28   29   23   21   18   20
     DictCache: 194  95   68   49   39   35   31   25   22   22   18   19
         Cache: 190  184  193  198  192  188  184  184  197  188  179  178
第二次普通并发: 927  464  314  232  191  158  138  126  112  93   93   90

----------------------- 开始  从1到100   重复次数:6 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 1124 566  380  281  224  190  162  141  138  112  112  95
  AntiDupCache: 180  93   61   48   38   32   30   25   25   20   18   20
  AntiDupQueue: 184  92   64   48   39   36   31   22   20   17   19   19
     DictCache: 193  96   63   48   39   35   31   23   22   19   20   20
         Cache: 188  190  185  188  184  189  179  188  176  180  186  181
第二次普通并发: 1130 563  389  290  229  192  170  146  132  116  114  93

----------------------- 开始  从1到100   重复次数:7 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 1312 667  446  330  270  225  190  255  162  134  135  122
  AntiDupCache: 198  98   67   47   36   33   32   30   22   17   17   20
  AntiDupQueue: 188  92   63   45   39   37   31   29   23   19   19   19
     DictCache: 189  93   62   48   39   33   30   25   22   20   18   20
         Cache: 192  199  196  194  190  193  199  196  192  184  187  180
第二次普通并发: 1306 668  430  330  269  230  190  165  154  129  128  116

----------------------- 开始  从1到100   重复次数:8 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 1507 759  500  384  300  257  220  189  179  153  148  140
  AntiDupCache: 187  95   65   47   42   35   29   27   23   20   18   20
  AntiDupQueue: 184  99   63   44   41   37   30   27   23   21   18   19
     DictCache: 191  96   66   48   38   35   29   25   22   20   18   18
         Cache: 191  187  190  188  188  181  183  181  183  182  180  184
第二次普通并发: 1499 755  512  382  305  252  218  186  179  151  150  138

----------------------- 开始  从1到100   重复次数:9 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 1694 839  564  429  341  286  255  215  193  169  167  143
  AntiDupCache: 186  94   67   51   39   37   29   26   24   20   20   18
  AntiDupQueue: 198  89   63   51   40   36   30   29   25   19   20   17
     DictCache: 183  97   65   45   36   33   31   28   23   22   18   17
         Cache: 182  189  191  189  182  176  185  184  179  175  177  176
第二次普通并发: 1682 843  573  430  345  277  251  218  193  171  168  147

----------------------- 开始  从1到100   重复次数:10 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 1863 929  634  474  378  321  274  236  212  189  188  160
  AntiDupCache: 190  95   66   47   39   33   30   26   23   21   19   19
  AntiDupQueue: 184  94   61   49   39   32   31   23   23   20   17   19
     DictCache: 186  96   66   46   39   33   28   24   23   20   18   21
         Cache: 184  188  191  188  188  181  182  176  186  189  180  177
第二次普通并发: 1873 939  639  470  375  323  274  240  214  188  190  164

----------------------- 开始  从1到100   重复次数:11 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 2051 1039 698  518  421  349  298  274  233  211  188  185
  AntiDupCache: 187  95   63   49   42   37   28   29   23   20   22   21
  AntiDupQueue: 187  92   68   48   36   35   31   27   25   19   21   20
     DictCache: 199  99   65   48   37   34   31   28   24   19   20   19
         Cache: 190  193  197  186  192  193  194  199  194  191  190  191
第二次普通并发: 2083 1041 695  521  423  351  299  268  239  213  188  182

----------------------- 开始  从1到100   重复次数:12 单位: ms -----------------------
      并发数量: 1    2    3    4    5    6    7    8    9    10   11   12
      普通并发: 2241 1132 757  574  460  379  332  286  258  234  206  186
  AntiDupCache: 182  91   63   46   38   34   29   28   24   22   22   20
  AntiDupQueue: 183  93   63   47   39   35   29   26   27   21   21   17
     DictCache: 185  93   64   46   38   32   29   26   26   20   21   19
         Cache: 182  187  190  184  185  187  185  184  176  182  187  175
第二次普通并发: 2242 1135 757  561  453  376  326  283  252  227  208  192

----------------------- 结束 -----------------------