Below is a sample interactive console session designed to show some of the basic features and functionality of the vedis-python library. Full API documentation will be available soon.
You can use Vedis like a dictionary for simple key/value lookups:
In [1]: from vedis import Vedis
In [2]: db = Vedis(':memory:') # Create an in-memory database. Alternatively you could supply a filename for an on-disk database.
In [3]: db['k1'] = 'v1'
In [4]: db['k1']
Out[4]: 'v1'
In [5]: db.append('k1', 'more data')
In [6]: db['k1']
Out[6]: 'v1more data'
In [7]: del db['k1']
In [8]: db['k1']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-8-a988c6a20437> in <module>()
----> 1 db['k1']
/home/charles/tmp/scrap/z1/src/vedis/vedis/core.pyc in fetch(self, key, buf_size)
125 return buf.raw[:nbytes.value]
126 elif rc == SXERR_NOTFOUND:
--> 127 raise KeyError(key)
128 handle_return_value(rc)
129
KeyError: 'k1'
You can set and get multiple items at a time:
In [10]: db.mset(k1='v1', k2='v2', k3='v3')
Out[10]: True
In [11]: db.mget('k1', 'k2', 'missing key', 'k3')
Out[11]: <generator object iter_vedis_array at 0x7f37dd58be10>
In [12]: list(db.mget('k1', 'k2', 'missing key', 'k3'))
Out[12]: ['v1', 'v2', None, 'v3']
In addition to storing string keys/values, you can also implement counters:
In [13]: db.incr('counter')
Out[13]: 1
In [14]: db.incr('counter')
Out[14]: 2
In [15]: db.incr_by('counter', 10)
Out[15]: 12
In [16]: db.decr('counter')
Out[16]: 11
Keys can be copied or moved.
In [55]: db['k1']
Out[55]: 'v1'
In [56]: db.copy('k1', 'k-new1')
Out[56]: True
In [57]: db['k-new1']
Out[57]: 'v1'
In [58]: db.move('k-new1', 'k-moved')
Out[58]: True
In [59]: db['k-moved']
Out[59]: 'v1'
In [60]: db['k-new1'] # Raises KeyError
Vedis supports nested key/value lookups which have the additional benefit of supporting operations to retrieve all keys, values, the number of items in the hash, and so on.
In [17]: db.hset('my_hash', 'k1', 'v1')
In [18]: db.hmset('my_hash', k2='v2', k3='v3')
In [19]: db.hgetall('my_hash')
Out[19]: {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
In [20]: list(db.hmget('my_hash', 'k1', 'k3'))
Out[20]: ['v1', 'v3']
In [21]: db.hlen('my_hash')
Out[21]: 3
In [22]: db.hkeys('my_hash')
Out[22]: <generator object iter_vedis_array at 0x7f37dd59d410>
In [23]: list(db.hkeys('my_hash'))
Out[23]: ['k1', 'k3', 'k2']
In [24]: list(db.hvals('my_hash'))
Out[24]: ['v1', 'v3', 'v2']
Vedis supports a set data-type which stores a unique collection of items.
In [29]: db.sadd('my_set', 'item1')
Out[29]: 1
In [30]: db.sadd('my_set', 'item2')
Out[30]: 1
In [31]: db.scard('my_set')
Out[31]: 2
In [32]: db.smembers('my_set')
Out[32]: <generator object iter_vedis_array at 0x7f37dd59d5a0>
In [33]: list(db.smembers('my_set'))
Out[33]: ['item1', 'item2']
In [34]: db.speek('my_set')
Out[34]: 'item2'
In [35]: db.stop('my_set')
Out[35]: 'item1'
In [36]: db.spop('my_set')
Out[36]: 'item2'
In [37]: db.sismember('my_set', 'item1')
Out[37]: True
In [38]: db.srem('my_set', 'item1')
Out[38]: 1
If you have two sets, you can calculate the intersection and difference:
In [39]: db.sadd('s1', 'i1')
Out[39]: 1
In [40]: db.sadd('s1', 'i2')
Out[40]: 1
In [41]: db.sadd('s2', 'i2')
Out[41]: 1
In [42]: db.sadd('s2', 'i3')
Out[42]: 1
In [43]: db.sinter('s1', 's2')
Out[43]: <generator object iter_vedis_array at 0x7f37dd59da50>
In [44]: list(db.sinter('s1', 's2'))
Out[44]: ['i2']
In [45]: list(db.sdiff('s1', 's2'))
Out[45]: ['i1']
Vedis also supports a list data type.
In [46]: db.lpush('my_list', 'i1')
Out[46]: 1
In [47]: db.lpush('my_list', 'i2')
Out[47]: 2
In [48]: db.llen('my_list')
Out[48]: 2
In [49]: db.lindex('my_list', 0)
Out[49]: 'i1'
In [50]: db.lindex('my_list', 1)
Out[50]: 'i2'
In [51]: db.lindex('my_list', 2)
In [52]: db.lpop('my_list')
Out[52]: 'i1'
Vedis has a somewhat quirky collection of other miscellaneous commands. Below is a sampling:
In [64]: db.base64('encode me')
Out[64]: 'ZW5jb2RlIG1l'
In [65]: db.base64_decode(_)
Out[65]: 'encode me'
In [66]: db.random_string(10)
Out[66]: 'raurquvsnx'
In [67]: db.rand(1, 6)
Out[67]: 4
In [68]: db.size_format(100000)
Out[68]: '97.6 KB'
In [69]: list(db.str_split('abcdefghijklmnop', 5))
Out[69]: ['abcde', 'fghij', 'klmno', 'p']
In [70]: db['data'] = 'abcdefghijklmnop'
In [71]: db.strlen('data')
Out[71]: 16
In [72]: db.strip_tags('<p>This <span>is</span> a <a href="#">test</a>.</p>')
Out[72]: 'This is a test.'