-
Notifications
You must be signed in to change notification settings - Fork 1
Accelerating Redis Get Set Operations
Hüseyin Tuğrul BÜYÜKIŞIK edited this page Sep 29, 2021
·
2 revisions
"use strict"
// backing-store
const Redis = require("ioredis");
const redis = new Redis();
// LRU cache
let Lru = require("./lrucache.js").Lru;
let num_cache_elements = 1500;
let element_life_time_miliseconds = 1000;
let cache = new Lru(num_cache_elements, async function(key,callback){
redis.get(key, function (err, result) {
callback(result);
});
}, element_life_time_miliseconds, async function(key,value,callback){
redis.set(key,value, function (err, result) {
callback();
});
});
const N_repeat = 20;
const N_bench = 20000;
const N_concurrency = 100;
const N_dataset = 1000;
function randomKey(){ return Math.floor(Math.random()*N_dataset); }
// without LRU caching
async function benchWithout(callback){
for(let i=0;i<N_bench;i+=N_concurrency){
let ctr = 0;
let w8 = new Promise((success,fail)=>{
for(let j=0;j<N_concurrency;j++)
{
redis.set(randomKey(),i, function (err, result) {
redis.get(randomKey(), function (err, result) {
ctr++;
if(ctr == N_concurrency)
{
success(1);
}
});
});
}
});
let result = await w8;
}
callback();
}
// with LRU caching
async function benchWith(callback){
for(let i=0;i<N_bench;i+=N_concurrency){
let ctr = 0;
let w8 = new Promise((success,fail)=>{
for(let j=0;j<N_concurrency;j++)
{
cache.set(randomKey(),i, function (result) {
cache.get(randomKey(), function (result) {
ctr++;
if(ctr == N_concurrency)
{
success(1);
}
});
});
}
});
let result = await w8;
}
callback();
}
let ctr = 0;
function restartWithoutLRU(callback){
let t = Date.now();
benchWithout(function(){
console.log("without LRU: "+(Date.now() - t)+" milliseconds");
ctr++;
if(ctr != N_repeat)
{
restartWithoutLRU(callback);
}
else
{
ctr=0;
callback();
}
});
}
function restartWithLRU(){
let t = Date.now();
benchWith(function(){
console.log("with LRU: "+(Date.now() - t)+" milliseconds");
ctr++;
if(ctr != N_repeat)
{
restartWithLRU();
}
});
}
restartWithoutLRU(restartWithLRU);Cache size / dataset size = 0.5:
without LRU: 1274 milliseconds
without LRU: 1081 milliseconds
without LRU: 1054 milliseconds
without LRU: 1014 milliseconds
without LRU: 1023 milliseconds
without LRU: 1017 milliseconds
without LRU: 1009 milliseconds
without LRU: 1030 milliseconds
without LRU: 1019 milliseconds
without LRU: 1015 milliseconds
without LRU: 1030 milliseconds
without LRU: 1009 milliseconds
without LRU: 1056 milliseconds
without LRU: 1073 milliseconds
without LRU: 1098 milliseconds
without LRU: 1135 milliseconds
without LRU: 1068 milliseconds
without LRU: 1066 milliseconds
without LRU: 1081 milliseconds
without LRU: 1069 milliseconds
with LRU: 734 milliseconds
with LRU: 653 milliseconds
with LRU: 621 milliseconds
with LRU: 605 milliseconds
with LRU: 613 milliseconds
with LRU: 612 milliseconds
with LRU: 601 milliseconds
with LRU: 593 milliseconds
with LRU: 587 milliseconds
with LRU: 603 milliseconds
with LRU: 595 milliseconds
with LRU: 600 milliseconds
with LRU: 601 milliseconds
with LRU: 593 milliseconds
with LRU: 600 milliseconds
with LRU: 596 milliseconds
with LRU: 585 milliseconds
with LRU: 622 milliseconds
with LRU: 592 milliseconds
with LRU: 605 milliseconds
Cache size / dataset size = 0.8:
with LRU: 539 milliseconds
with LRU: 449 milliseconds
with LRU: 446 milliseconds
with LRU: 443 milliseconds
with LRU: 443 milliseconds
with LRU: 441 milliseconds
with LRU: 438 milliseconds
with LRU: 449 milliseconds
with LRU: 442 milliseconds
with LRU: 439 milliseconds
with LRU: 440 milliseconds
with LRU: 441 milliseconds
with LRU: 439 milliseconds
with LRU: 446 milliseconds
with LRU: 432 milliseconds
with LRU: 429 milliseconds
with LRU: 442 milliseconds
with LRU: 433 milliseconds
with LRU: 442 milliseconds
with LRU: 430 milliseconds
Cache size / dataset size = 0.99:
with LRU: 447 milliseconds
with LRU: 345 milliseconds
with LRU: 347 milliseconds
with LRU: 334 milliseconds
with LRU: 339 milliseconds
with LRU: 334 milliseconds
with LRU: 331 milliseconds
with LRU: 332 milliseconds
with LRU: 340 milliseconds
with LRU: 329 milliseconds
with LRU: 326 milliseconds
with LRU: 326 milliseconds
with LRU: 325 milliseconds
with LRU: 338 milliseconds
with LRU: 320 milliseconds
with LRU: 329 milliseconds
with LRU: 330 milliseconds
with LRU: 313 milliseconds
with LRU: 334 milliseconds
with LRU: 336 milliseconds
Cache size / dataset size = 1.5:
with LRU: 383 milliseconds
with LRU: 30 milliseconds
with LRU: 30 milliseconds
with LRU: 32 milliseconds
with LRU: 30 milliseconds
with LRU: 32 milliseconds
with LRU: 30 milliseconds
with LRU: 29 milliseconds
with LRU: 30 milliseconds
with LRU: 29 milliseconds
with LRU: 30 milliseconds
with LRU: 30 milliseconds
with LRU: 30 milliseconds
with LRU: 31 milliseconds
with LRU: 29 milliseconds
with LRU: 30 milliseconds
with LRU: 29 milliseconds
with LRU: 30 milliseconds
with LRU: 30 milliseconds
with LRU: 29 milliseconds