2017-09-06 5 views

Antwort

2

Ja, können Sie Daten in Tarantool verfallen und in einer viel flexibler als in Redis. Dies ist jedoch ohne Leerzeichen nicht möglich, da der Space ein Container für Daten in Tarantool ist (wie Datenbank oder Tabelle in anderen Datenbanksystemen).

Um Daten ablaufen zu lassen, müssen Sie expirationd tarantool rock mit tarantoolctl rocks install expirationd Befehl installieren. Vollständige Dokumentation zu expirationd Daemon finden Sie here.

Fühlen Sie sich frei unter einen Beispielcode zu verwenden:

#!/usr/bin/env tarantool 

package.path = './.rocks/share/tarantool/?.lua;' .. package.path 

local fiber = require('fiber') 
local expirationd = require('expirationd') 


-- setup the database 

box.cfg{} 
box.once('init', function() 
    box.schema.create_space('test') 
    box.space.test:create_index('primary', {parts = {1, 'unsigned'}}) 
end) 

-- print all fields of all tuples in a given space 
local print_all = function(space_id) 
    for _, v in ipairs(box.space[space_id]:select()) do 
     local s = '' 
     for i = 1, #v do s = s .. tostring(v[i]) .. '\t' end 
     print(s) 
    end 
end 

-- return true if tuple is more than 10 seconds old 
local is_expired = function(args, tuple) 
    return (fiber.time() - tuple[3]) > 10 
end 

-- simply delete a tuple from a space 
local delete_tuple = function(space_id, args, tuple) 
    box.space[space_id]:delete{tuple[1]} 
end 

local space = box.space.test 

print('Inserting tuples...') 

space:upsert({1, '0 seconds', fiber.time()}, {}) 
fiber.sleep(5) 
space:upsert({2, '5 seconds', fiber.time()}, {}) 
fiber.sleep(5) 
space:upsert({3, '10 seconds', fiber.time()}, {}) 

print('Tuples are ready:\n') 

print_all('test') 

print('\nStarting expiration daemon...\n') 

-- start expiration daemon 
-- in a production full_scan_time should be bigger than 1 sec 
expirationd.start('expire_old_tuples', space.id, is_expired, { 
    process_expired_tuple = delete_tuple, args = nil, 
    tuples_per_iteration = 50, full_scan_time = 1 
}) 

fiber.sleep(5) 
print('\n\n5 seconds passed...') 
print_all('test') 

fiber.sleep(5) 
print('\n\n10 seconds passed...') 
print_all('test') 

fiber.sleep(5) 
print('\n\n15 seconds passed...') 
print_all('test') 

os.exit() 
Verwandte Themen