Ipidea丨Python操作redis

作者:IPIDEA

2020-03-24 16:00:19

## 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提供的服务必须在境外网络环境下使用

热门资讯