-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathbenchmark.py
73 lines (56 loc) · 1.97 KB
/
benchmark.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import random
from django.core.cache import caches
from django.core.management import call_command
from ...utils import bench_setup
class DatabaseCacheBackend:
def setup(self):
bench_setup()
call_command("createcachetable", verbosity=0)
random.seed(0)
self.cache = caches["db"]
self.iterations = 100
self.int_key = "int_key"
self.cache.set(self.int_key, 0)
self.keys = [
"key_{}".format(random.randint(1, 500)) for _ in range(self.iterations)
]
self.values = [
random.randint(1, 1024**1) * bytes([random.randint(0, 255)])
for _ in range(self.iterations)
]
def time_add(self):
for key, value in zip(self.keys, self.values):
self.cache.add(key, value)
def time_get(self):
for key in self.keys:
self.cache.get(key)
def time_set(self):
for key, value in zip(self.keys, self.values):
self.cache.set(key, value)
def time_get_or_set(self):
for key, value in zip(self.keys, self.values):
self.cache.get_or_set(key, value)
def time_touch(self):
for key in self.keys:
self.cache.touch(key)
def time_delete(self):
for key in self.keys:
self.cache.delete(key)
def time_get_many(self):
for _ in range(self.iterations):
self.cache.get_many(self.keys)
def time_set_many(self):
for _ in range(self.iterations):
self.cache.set_many(dict(zip(self.keys, self.values)))
def time_delete_many(self):
for _ in range(self.iterations):
self.cache.delete_many(self.keys)
def time_clear(self):
for _ in range(self.iterations):
self.cache.clear()
def time_incr(self):
for _ in range(self.iterations):
self.cache.incr(self.int_key)
def time_decr(self):
for _ in range(self.iterations):
self.cache.decr(self.int_key)