Ich möchte Tarantool verwenden, um Daten zu speichern. Wie kann ich Daten mit TTL und einfacher Logik (ohne Leerzeichen) speichern?Kann ich Tarantool anstelle von Redis verwenden?
So:
box:setx(key, value, ttl);
box:get(key)
Ich möchte Tarantool verwenden, um Daten zu speichern. Wie kann ich Daten mit TTL und einfacher Logik (ohne Leerzeichen) speichern?Kann ich Tarantool anstelle von Redis verwenden?
So:
box:setx(key, value, ttl);
box:get(key)
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()