1use strict; 2use warnings; 3 4use Benchmark qw(:all); 5use Cache::FastMmap; 6use Cache::LRU; 7use Cache::Ref::LRU; 8use Cache::Ref::Util::LRU::Array; 9use Cache::Ref::Util::LRU::List; 10use Tie::Cache::LRU; 11 12my $size = 1024; 13my $loop = 1000; 14 15sub cache_hit { 16 my $cache = shift; 17 $cache->set(a => 1); 18 my $c = 0; 19 $c += $cache->get('a') 20 for 1..$loop; 21 $c; 22} 23 24print "cache_hit:\n"; 25cmpthese(-1, { 26 'Cache::FastMmap' => sub { 27 cache_hit( 28 Cache::FastMmap->new( 29 cache_size => '1m', 30 ), 31 ); 32 }, 33 'Cache::FastMmap (raw)' => sub { 34 cache_hit( 35 Cache::FastMmap->new( 36 cache_size => '1m', 37 raw_values => 1, 38 ), 39 ); 40 }, 41 'Cache::LRU' => sub { 42 cache_hit( 43 Cache::LRU->new( 44 size => $size, 45 ), 46 ); 47 }, 48 'Cache::Ref::LRU (Array)' => sub { 49 cache_hit( 50 Cache::Ref::LRU->new( 51 size => $size, 52 lru_class => qw(Cache::Ref::Util::LRU::Array), 53 ), 54 ); 55 }, 56 'Cache::Ref::LRU (List)' => sub { 57 cache_hit( 58 Cache::Ref::LRU->new( 59 size => $size, 60 lru_class => qw(Cache::Ref::Util::LRU::List), 61 ), 62 ); 63 }, 64 'Tie::Cache::LRU' => sub { 65 tie my %cache, 'Tie::Cache::LRU', $size; 66 $cache{a} = 1; 67 my $c = 0; 68 $c += $cache{a} 69 for 1..$loop; 70 $c; 71 }, 72}); 73 74print "\ncache_set:\n"; 75srand(0); 76my @keys = map { int rand(1048576) } 1..65536; 77 78sub cache_set { 79 my $cache = shift; 80 $cache->set($_ => 1) 81 for @keys; 82 $cache; 83} 84 85cmpthese(-1, { 86 # no test for Cache::FastMmap since it does not have the "size" parameter 87 'Cache::LRU' => sub { 88 cache_set( 89 Cache::LRU->new( 90 size => $size, 91 ), 92 ); 93 }, 94 # too slow 95 #'Cache::Ref::LRU (Array)' => sub { 96 # cache_set( 97 # Cache::Ref::LRU->new( 98 # size => $size, 99 # lru_class => qw(Cache::Ref::Util::LRU::Array), 100 # ), 101 # ); 102 #}, 103 'Cache::Ref::LRU (List)' => sub { 104 cache_set( 105 Cache::Ref::LRU->new( 106 size => $size, 107 lru_class => qw(Cache::Ref::Util::LRU::List), 108 ), 109 ); 110 }, 111 'Tie::Cache::LRU' => sub { 112 tie my %cache, 'Tie::Cache::LRU', $size; 113 $cache{$_} = 1 114 for @keys; 115 \%cache; 116 }, 117}); 118