Python中Redis的使用
本文章主要是python redis模块的一些简单的使用,主要为了给以后网站设置缓存而准备一些必要的知识。
Redis模块安装
pip3 install redis
建立连接
要使用redis数据库,首先要与redis服务端建立一个连接,一般连接的建立有两种方式:
- 直接建立连接
r = redis.Redis() # Default parameters
r = redis.Redis(host="127.0.0.1", password=None, port=6379, db=0)
- 使用连接池
pool = redis.ConnectionPool(host="127.0.0.1", port=6379, db=0)
r = redis.Redis(connection_pool=pool)
使用
Redis目前支持以下几种数据类型:
- string:存储string,以及int或者float等数据类型的数据。
- hash:存储字典类型的数据
- list:存储列表类型的数据
- set:存储集合类型的数据
- zset:存储的也是集合类型的数据,不过数据是有序存储
文档地址: https://redis-py.readthedocs.io/en/latest/
- 字符串类型
In [11]: r.set("foo", "bar")
Out[11]: True
In [12]: r.get("foo")
Out[12]: b'bar'
In [26]: r.delete("foo")
Out[26]: 1
In [27]: r.get("foo")
Key的加减运算
In [31]: r.incr("cnt")
Out[31]: 11
In [32]: r.incr("cnt")
Out[32]: 12
In [33]: r.incrby("cnt", 20)
Out[33]: 32
In [34]: r.set("cnt",10)
Out[34]: True
In [35]: r.incr("cnt")
Out[35]: 11
In [36]: r.incr("cnt")
Out[36]: 12
In [37]: r.incrby("cnt", 20)
Out[37]: 32
In [38]: r.decr("cnt")
Out[38]: 31
In [39]: r.incrby("cnt", -18)
Out[39]: 13
获取字符长度:
In [40]: r.set("name", "你好, Redis")
Out[40]: True
In [41]: r.strlen("name")
Out[41]: 14
这里默认的字符串的类型是bytes
而不是python3中常用的str
类型,为了避免因为字符类型导致问题,可以在建立连接的时候加上一个decode_responses=True
选项,这样返回的数据就会被直接解码为python3的str
格式。
- 散列类型
散列类型一般用来保存一个key
多个字段,每个字段可以单独更改的情况。操作举例如下
In [46]: r.hset("user", "name", "major")
Out[46]: 0
In [47]: r.hmset("user", {"address":"china", "age":10})
Out[47]: True
In [48]: r.hget("user", "age")
Out[48]: '10'
In [49]: r.hincrby("user", "age", 5)
Out[49]: 15
IIn [51]: import datetime
In [52]: stamp=datetime.datetime.now()
In [53]: r.hset("user", "stamp", stamp)
Out[53]: 1
In [54]: r.hgetall("user")
Out[54]:
{'address': 'china',
'age': '15',
'name': 'major',
'stamp': '2017-06-03 10:27:08.294347'}
可以看到key
为user
的键对应多个fields
并且每个field
都是可以单独修改的。还可以通过hgetall
获取所有的数据,需要说明的是,这里所有的数据都是按照字符串保存的,包括int
类型的age
以及时间戳,因此在数据处理上要注意。
- 列表类型
列表类型可以保存一个有序的字符串列表,常用的操作是向列表两端添加数据或者获取列表的一个片断。列表内部通过链表实现,因此向两边插入数据很快,但向中间插入数据就很慢。通过索引的方式访问列表也是很慢的。
# 直接向key中push数据就会创建一个列表
In [91]: r.lpush("number", 1)
Out[91]: 1
In [92]: r.lpush("number", 2)
Out[92]: 2
In [93]: r.lpush("number", 3)
Out[93]: 3
# 列表可以从两端pop数据
In [105]: r.lpop("number")
Out[105]: '4'
In [106]: r.rpop("number")
Out[106]: '1'
# 列表可以通过正向和负向索引获取中间的一个片断。索引超出列表不会报错,而是返回列表中存在的数据。
In [108]: r.lrange("number", -3, -1)
Out[108]: ['3', '2']
In [109]: r.lrange("number", 1, 3)
Out[109]: ['2']
最后更新于 2017-10-19 06:54:06 并被添加「」标签,已有 2507 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。