Ipidea丨Python操作redis
2020-03-24
## Python操作redis
---
在运用Python进行网络爬虫或数据处理时常常会用到Redis数据库,灵活用好Redis数据库对于我们的程序来说意义重大。
Redis全称Remote Dictionary Server,是一个高性能key-value存储系统,通常被用作数据结构服务器。
- ### 连接Redis
使用Python连接Redis数据库通常有两种方式:
1. 直接连接
```python
import redis
reds = redis.Redis(host='localhost',port=6379,db=0)
```
2. 连接池连接
连接池连接是预先创建多个连接通道,适用于需要对Redis数据库进行频繁多次连接的情况
```python
pool = redis.ConnectionPool(host='localhost',port=6379,db=0)
reds = redis.Redis(connection_pool=pool)
```
- ### 数据类型操作
Redis的key-value存储系统中的value可以是String(字符串)、List(列表)、Set(集合)、Hash(哈希)、Sorted set(有序集合)等多种类型,对于每种类型相应的存储和操作方式也有所区别,下面介绍一些常用的类型操作。
- String类型
创建或存储数据:
```python
reds.set('key','value')
```
获取数据:
```python
reds.get('key')
```
防止账号关联存取:
```python
# 存储
reds.mset({"key1":"value1","key2":"value2"})
# 获取
reds.mget("key1","key2")
```
其他的操作:
```python
# 获取对应key的字节长度
reds.strlen("key")
# 在对应的key的value后追加内容
reds.append("key","appendvalue")
```
- List类型
用于存储List类型,一个key对应一个List列表。
存储数据:
```python
# 左入
reds.lpush('name','value1')
# 右入
reds.rpush('name','value2')
```
获取数据:
```python
# 左出
reds.lpop('name')
# 右出
reds.rpop('name')
```
其他操作:
```python
# 获取列表长度
reds.llen('name')
# 删除列表中某个值
reds.lrem('name',count=0,'value')
# count = 0 删除所有指定值
# count > 0 从前向后删除
# count < 0 从后向前删除
# 获取指定长度的值
reds.lrange('name','start','end')
```
- Set类型
集合类型用于存储非重复的列表数据。
存取数据:
```python
# 存入
reds.sadd("name","value1")
# 重复数据不会二次存储
reds.sadd("name","value1","value2")
# 取出
reds.spop("name")
```
获取集合中元素数量:
```python
reds.scard("name")
```
返回集合所有的元素:
```python
reds.smembers("name")
```
删除某个成员元素:
```python
reds.srem("name","value")
```
- Hash类型
哈希用于存储name对应一个字典的类型。
数据存取:
```python
# 存储一个键值对
reds.hset("name","key","value")
# 获取对应的键的值
reds.hget("name","key")
```
对name的操作:
```python
# 获取name对应所有键值对
reds.hgetall("name")
# 获取键值对的数量
reds.hlen("name")
# 获取所有的key
reds.hkeys("name")
# 获取所有的value
reds.hvals("name")
```
其他操作:
```python
# 检查某个key是否存在
reds.hexists("name","key1")
# 删除指定的键值对
reds.hdel("name","key1")
```
- Redis发布订阅
Redis发布订阅是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。在Python程序中通常用于分布式项目的应用。
发布信息
```python
def publish_message(msg):
""" 广播 """
pub_redis = redis.StrictRedis(connection_pool=redis_pool)
channel = 'channel_1'
pub_redis.publish(channel, msg)
```
订阅信息
```python
def subscribe_message():
""" 订阅 """
sub_redis = redis.StrictRedis(connection_pool=redis_pool)
p = sub_redis.pubsub()
p.subscribe('channel_1')
for item in p.listen():
if item['type'] == 'message':
data = item['data'].decode('utf-8')
data = json.load(data)
print(data)
if item['data'] == b'over':
break
p.unsubscribe('channel_1')
print("取消订阅")
```
结语:Redis在Python项目中有着重要的应用,用好Redis数据库可以实现代码功能和逻辑上事半功倍的效果,尤其是在分布式框架的应用中,如果需要使用全球HTTP代理IP,欢迎访问:Ipidea全球IP。
声明:本文来自网络投稿,不代表IPIDEA立场,若存在侵权、安全合规问题,请及时联系IPIDEA进行删除。