到目前为止,不论是字符串还是哈希,当涉及到多条相同性质的数据存储时,采用的办法是在键上通过冒号和数字来标识它们的ID(例如下面这段代码);但是当需要完成一个分页功能(也就是对一个范围段数字进行切片)时,就无法满足这种需求。解决分片的问题只能利用列表类型的特性。
字符串类型
r.set('str_computer:1', json.dumps({'owner': 'john', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'}))
r.set('str_computer:2', json.dumps({'owner': 'anna', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'}))
r.set('str_computer:3', json.dumps({'owner': 'eric', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'}))
...
...
r.set('str_computer:1000', json.dumps({'owner': 'jack', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'}))
哈希类型
r.hmset('hash_computer:1', {'owner': 'john', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'})
r.hmset('hash_computer:2', {'owner': 'anna', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'})
r.hmset('hash_computer:3', {'owner': 'eric', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'})
...
...
r.hmset('hash_computer:1000', {'owner': 'jack', 'cpu': 'i5', 'hd': 'ssd', 'mem': '8G'})
在redis中列表
是最为核心的类型,由于redis本身不支持深度条件查找(不像mongodb或关系型数据库那样可以利用内置语法来查询到多条数据的过滤条件语句),因此在redis中涉及到频繁更新或读取的字段一般都会拆分开放在列表中以id进行记录;例如分页、评论、关注列表、粉丝列表、动态统计信息、消息队列。
缺点
由于没有外键的原因,一般的做法都是使用列表通过id来和其他类型数据的ID进行一一对应,所以当删除某条字符串或哈希类型的数据时,也要单独去删除列表中对应的id。
最后
redis列表的操作命令和python的列表很接近,所以我就不展开记录了。
参考
- [x] 书籍: Redis 入门指南
- [x] Redis官网: 列表命令集