Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions txredis/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,27 @@ def rename(self, src, dst, preserve=False):
self._send('RENAMENX' if preserve else 'RENAME', src, dst)
return self.getResponse()

def dump(self, key):
"""
Dump a key
"""
self._send('DUMP',key)
return self.getResponse()

def restore(self, key, serializedValue,ttl=0):
"""
Restore a key by a rerialized-value (see dump method)
note that serialized-value and ttl is not in the same order then Redis api
"""
self._send('RESTORE',key, ttl, serializedValue)
return self.getResponse()

def copy(self, src, dest, ttlOfDest=0):
"""
copy a value of a key to another (via DUMP-RESTORE methods)
"""
return self.dump(src).addCallback(lambda dump: self.restore(dest,dump,ttlOfDest))

def dbsize(self):
"""
Return the number of keys in the selected database
Expand Down
32 changes: 31 additions & 1 deletion txredis/tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,37 @@ def test_unwatch(self):
yield self.redis.watch('foo')
r = yield self.redis.unwatch()
self.assertEqual(r, 'OK')


@defer.inlineCallbacks
def test_persist(self):
yield self.redis.set("persist_test","titi")
yield self.redis.expire('persist_test',1000)
yield self.redis.persist('persist_test')
ttl = yield self.redis.ttl('persist_test')
self.assertEqual(ttl,-1)

@defer.inlineCallbacks
def test_dump(self):
yield self.redis.set("mykey",10)
dump = yield self.redis.dump("mykey")
self.assertEqual(dump,r"\x00\xc0\n\x06\x00\xf8r?\xc5\xfb\xfb_(")

@defer.inlineCallbacks
def test_restore(self):
yield self.redis.set("mykey",10)
dump = yield self.redis.dump("mykey")
yield self.redis.delete("mykey")
yield self.redis.restore("mykey",dump)
newval = yield self.redis.get("mykey")
self.assertEqual(newval,10)

@defer.inlineCallbacks
def test_copy(self):
yield self.redis.set("mykey",10)
yield self.redis.copy("mykey","mykey2")
mykey2 = yield self.redis.get("mykey2")
self.assertEqual(10,mykey2)


class StringsCommandTestCase(CommandsBaseTestCase):
"""Test commands that operate on string values.
Expand Down