本文的示例代码参考redis-lists.py
Python
pip install redis
pip list | grep redis
Python环境搭建详细参考pyenv
Redis
vim redis-lists.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pprint
import redis
import unittest
KEY_RECENT_CONTACT = 'recent_contacts'
def add_update_contact(conn, contact):
pipeline = conn.pipeline(True)
pipeline.lrem(KEY_RECENT_CONTACT, contact)
pipeline.lpush(KEY_RECENT_CONTACT, contact)
pipeline.ltrim(KEY_RECENT_CONTACT, 0, 99)
pipeline.execute()
def get_autocomplete_list(conn, prefix):
candidates = conn.lrange(KEY_RECENT_CONTACT, 0, -1)
matches = []
for candidate in candidates:
if candidate.lower().startswith(prefix.lower()):
matches.append(candidate)
return matches
class Tests(unittest.TestCase):
def setUp(self):
self.conn = redis.Redis()
def tearDown(self):
self.conn.delete(KEY_RECENT_CONTACT)
del self.conn
def test_add_recent_contact(self):
for i in xrange(10):
add_update_contact(self.conn, 'contact-%i-%i' % (i//3, i))
all = self.conn.lrange(KEY_RECENT_CONTACT, 0, -1)
pprint.pprint(all)
add_update_contact(self.conn, 'contact-1-4')
all = self.conn.lrange(KEY_RECENT_CONTACT, 0, -1)
pprint.pprint(all)
self.assertEquals(all[0], 'contact-1-4')
filter = [c for c in all if c.startswith('contact-2-')]
contacts = get_autocomplete_list(self.conn, 'contact-2-')
pprint.pprint(filter)
pprint.pprint(contacts)
self.assertEquals(filter, contacts)
if __name__ == '__main__':
unittest.main()
运行脚本前需要启动Redis: docker run --name redis-lists -p 6379:6379 -d redis 关于Docker详细参考Docker入门
python redis-lists.py
['contact-3-9',
'contact-2-8',
'contact-2-7',
'contact-2-6',
'contact-1-5',
'contact-1-4',
'contact-1-3',
'contact-0-2',
'contact-0-1',
'contact-0-0']
['contact-1-4',
'contact-3-9',
'contact-2-8',
'contact-2-7',
'contact-2-6',
'contact-1-5',
'contact-1-3',
'contact-0-2',
'contact-0-1',
'contact-0-0']
['contact-2-8', 'contact-2-7', 'contact-2-6']
['contact-2-8', 'contact-2-7', 'contact-2-6']
.
----------------------------------------------------------------------
Ran 1 test in 0.009s
OK
网友评论