Python3 웹 크롤러 전투 -34, 데이터 저장 : 비 관계형 데이터베이스 스토리지 : 레디 스

레디 스 효율적인 비 관계형 데이터베이스, 높은 액세스 효율의 메모리 기반의 키 - 값 타입이지만, 또한 우리는 파이썬의 레디 스 작업을 소개하는이 섹션에서 매우 간단한을 사용하여, 데이터 구조의 다양한 지원이 RedisPy를 소개합니다 사용 라이브러리입니다.

1. 준비

이 절을 시작하기 전에, 다음도 첫 번째 챕터를 설치하려면 설치 지침을 참조하지 않을 경우, RedisDump를 설치해야 할 경우 당신은 레디 스 및 RedisPy 라이브러리, 데이터 가져 오기 및 내보내기 작업을 설치했는지 확인하십시오.

2. 레디 스, StrictRedis

RedisPy 라이브러리는 두 개의 클래스 StrictRedis와 레디 스 레디 스 조작 명령 구현을 제공합니다.

StrictRedis 공식 대부분의 명령은, 레디 스 파라미터는 명령을 해당 집합에있어서, 예를 들어, 세트 () 메소드에 대응 달성한다. 레디 스는 그 주요 기능은 카레, 호환되게하기 위해, 방법은 그러한 방법에 값 것이다 위치 lrem ()와 NUM 파라미터로서, 재기록을 수행하는 여러 가지 방법의 이전 버전과의 호환성을 위해 StrictRedis 서브 클래스이다 명령 스왑 및 레디 스 명령 줄 매개 변수가 일치하지 않습니다.

이 관리는 StrictRedis을 권장하므로이 부분은 우리는 또한 데모 관련 방법 StrictRedis 클래스를 사용합니다.

3. 연결 레디 스

현재 지역 레디 스 내가 설치하고 포트 6379에서 실행, 암호가 foobared로 설정됩니다.

그런 다음 다음 예제와 테스트 커넥터 레디 스를 사용할 수 있습니다 :

from redis import StrictRedis

redis = StrictRedis(host='localhost', port=6379, db=0, password='foobared')
redis.set('name', 'Bob')
print(redis.get('name'))
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

여기에서 우리는 레디 스, 운영 포트, 데이터베이스의 사용, 암호 정보를 해결하기 위해 도입된다. 통과하지 않는 기본의 경우, 네 개의 매개 변수는 로컬 호스트, 6379,0, 아무도 없습니다. 이제 우리는 StrictRedis 객체를 선언 한 다음 키 - 값 쌍을 설정 세트 () 메소드에 대한 다음 호출은, 다음 인쇄 얻을.

결과 :

b'Bob'

이 (가) 작동 할 수) 우리의 연결에 성공하고, (설정 수행 할 수 있음을 보여준다.

물론, 우리는 또한 예를 들어, 연결 ConnectionPool을 사용할 수 있습니다 :

from redis import StrictRedis, ConnectionPool

pool = ConnectionPool(host='localhost', port=6379, db=0, password='foobared')
redis = StrictRedis(connection_pool=pool)

이러한 연결의 효과가 동일 소스 코드를 StrictRedis 관찰에서 발견 될 수 StrictRedis에 우리가 직접 ConnectionPool 인수가 동일하므로 경우에, 실제로 호스트, 포트 및 기타 매개 변수이며, ConnectionPool을 구성.

또한 URL에 의해 구축 지원 추가 ConnectionPool에서 URL 형식은 다음과 같은 세 가지 방법을 지원합니다 :

redis://[:password]@host:port/db
rediss://[:password]@host:port/db
unix://[:password]@/path/to/socket.sock?db=db

이 세 가지가 레디 스 TCP 연결을 생성하기 위해 URL을 나타냅니다, 레디 스 TCP + SSL 연결은, 레디 스 유닉스 소켓 연결, 우리는 우리가 여기, 당신이 쓸 수있는 경우 암호 부분은 생략 할 수없는 경우, 연결할 수 있습니다 위의 URL 중 하나를 구성 할 필요가 다음 당신에게 연결 URL을 보여줍니다

url = 'redis://:foobared@localhost:6379/0'
pool = ConnectionPool.from_url(url)
redis = StrictRedis(connection_pool=pool)
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

여기에 우리가 연결하는 첫 번째 연결 문자열을 사용, 우리는 먼저 레디 스 연결 문자열을 선언하고 from_url () 메소드는 ConnectionPool을 생성 한 다음 연결을 완료 할 StrictRedis를 통과 호출 때문에 연결이 URL을 사용하여 방법은 아주 간단합니다.

4. 키 조작

여기에 몇 가지 주로 키 판단하고 다음 요약을 할 수있는 작업의 방법은 다음과 같습니다

방법 효과 매개 변수 설명 예 쇼 샘플 결과
존재 (이름) 열쇠가 있는지 여부를 결정 이름 : 키 名 redis.exists ( '이름') 이 키 이름의 존재 참된
삭제 (이름) 키를 삭제하려면 이름 : 키 名 ( '이름') redis.delete 이 키 이름을 삭제 1
유형 (이름) 주요 유형 결정 이름 : 키 名 ( '이름') redis.type 이 이름 키 유형 분석 b'string '
키 (패턴) 모든 키의 규칙을 따라야 받기 패턴 : 일치하는 규칙 redis.keys ( 'n 개의 *') 은 n의 시작 부분에 대한 모든 키를 가져옵니다 [b'name ']
randomkey () 임의의 키를 가져옵니다 randomkey () 임의의 키를 가져옵니다 b'name '
이름을 변경 (SRC, DST) 핵심은 이름을 바꾸려면 SRC : 원래의 키 이름 DST : 새 키 이름 ( '이름', '닉네임') redis.rename 이름의 이름 바꾸기 별명 참된
dbsize () 키 현재 데이터베이스의 수를 가져옵니다 dbsize () 키 현재 데이터베이스의 수를 가져옵니다 (100)
만료 (이름, 시간) 초, 키 만료 시간을 설정 이름 : 키 이름 시간 : (초)을 redis.expire ( '이름', 2) 이 키 만료 시간의 이름은 2 초 설정 참된
TTL (이름) 초, 키 만료 시간을 가져 -1 영구적가 만료을 이름 : 키 名의 redis.ttl ( '이름') 이 키의 만료 시간 이름을 가져옵니다 -1
이동 (이름, DB) 다른 데이터베이스의 핵심 이름 : 키 이름의 DB : 데이터베이스 코드 ( '이름', 2) 이동 2 위는 데이터베이스 이름으로 이동 참된
flushdb () 모든 주요 데이터베이스의 현재 선택 삭제 flushdb () 모든 주요 데이터베이스의 현재 선택 삭제 참된
flushall () 모든 모든 주요 데이터베이스를 삭제 flushall () 모든 모든 주요 데이터베이스를 삭제 참된

5. 문자열 작업

저장의 형태로 가장 기본적인 레디 스 키 - 값 쌍가 다음과 같이 사용 요약 :

방법 효과 매개 변수 설명 예 쇼 샘플 결과
세트 (이름, 값) 데이터베이스에 키 값은 문자열 이름의 값을 할당 이름 : 키 이름 값 : 값을 redis.set ( '이름', '밥') 키 이름에 할당 된 값은 밥이다 참된
수 (명) 문자열 값의 이름에 대한 데이터베이스 키를 돌려줍니다 이름 : 키 名 ( '이름') redis.get 이 키 값의 이름을 돌려줍니다 b'Bob '
getset (이름, 값) 문자열 이름에 대한 데이터베이스 키 값에 가치를 부여하고 이전 값으로 돌아갑니다 이름 : 키 이름 값 : 새 값을 redis.getset ( '이름', '마이크') 할당 이름은 마이크이고 마지막 값을 얻을 b'Bob '
MGET (키, * 인수) 키의 복수의 대응하는 값을 반환 키 : 키의 목록 ([ '이름', '닉네임']) redis.mget 이름과 값의 별명을 돌려줍니다 [b'Mike 'b'Miker']
setnx (이름, 값) 키 값을 설정하기 전에 존재하지 않는 경우 이름 : 키 名 redis.setnx ( 'newname의', '제임스') 이 키가 존재하지 않는 newname의 경우, 값 제임스 설정 당신이 진정한 처음 실행, 거짓 초
SETEX (이름, 시간, 값) 값에 대응할 수있다 문자열 유형의 값을 설정하고 유효한 키 값을 지정 이름 : 키 이름 시간 : 유효 값 : 값을 redis.setex ( '이름', 1, '제임스') 이 키 값의 이름은 1 초 동안 제임스 유효 설정 참된
SetRange를 (이름, 오프셋 값) 지정된 키 값 문자열의 값을 설정 이름 : 키 이름 오프셋 : 오프셋 값 : 값 redis.set ( '이름', '안녕하세요') redis.setrange ( '이름', 6, '세계') 안녕하세요 문자열 이름이 제공되고, 보수의 위치 지수 세계 6 (11) 수정 된 문자열 길이
MSET (매핑) 일괄 할당 매핑 : 사전 redis.mset ({ 'NAME1': '듀란', 'NAME2': '제임스'}) 제임스에 듀란트에 NAME1, NAME2 참된
msetnx (매핑) 때 일괄 할당을 존재하지 않는 키 매핑 : 사전 redis.msetnx({'name3': 'Smith', 'name4': 'Curry'}) 在name3和name4均不存在的情况下才设置二者值 True
incr(name, amount=1) key为name的value增值操作,默认1,key不存在则被创建并设为amount name: key名 amount:增长的值 redis.incr('age', 1) age对应的值增1,若不存在则会创建并设置为1 1,即修改后的值
decr(name, amount=1) key为name的value减值操作,默认1,key不存在则被创建并设置为-amount name: key名 amount:减少的值 redis.decr('age', 1) age对应的值减1,若不存在则会创建并设置为-1 -1,即修改后的值
append(key, value) key为name的string的值附加value key: key名 redis.append('nickname', 'OK') 向key为nickname的值后追加OK 13,即修改后的字符串长度
substr(name, start, end=-1) 返回key为name的string的value的子串 name: key名 start: 起始索引 end: 终止索引,默认-1截取到末尾 redis.substr('name', 1, 4) 返回key为name的值的字符串,截取索引为1-4的字符 b'ello'
getrange(key, start, end) 获取key的value值从start到end的子字符串 key: key名 start: 起始索引 end: 终止索引 redis.getrange('name', 1, 4) 返回key为name的值的字符串,截取索引为1-4的字符 b'ello'

6. List操作

List,即列表。Redis 还提供了列表存储,列表内的元素可以重复,而且可以从两端存储,用法总结如下:

方法 作用 参数说明 示例 示例说明 示例结果
rpush(name, *values) 在key为name的list尾添加值为value的元素,可以传多个 name: key名 values: 值 redis.rpush('list', 1, 2, 3) 给list这个key的list尾添加1、2、3 3,list大小
lpush(name, *values) 在key为name的list头添加值为value的元素,可以传多个 name: key名 values: 值 redis.lpush('list', 0) 给list这个key的list头添加0 4,list大小
llen(name) 返回key为name的list的长度 name: key名 redis.llen('list') 返回key为list的列表的长度 4
lrange(name, start, end) 返回key为name的list中start至end之间的元素 name: key名 start: 起始索引 end: 终止索引 redis.lrange('list', 1, 3) 返回起始为1终止为3的索引范围对应的list [b'3', b'2', b'1']
ltrim(name, start, end) 截取key为name的list,保留索引为start到end的内容 name:key名 start: 起始索引 end: 终止索引 ltrim('list', 1, 3) 保留key为list的索引为1到3的元素 True
lindex(name, index) 返回key为name的list中index位置的元素 name: key名 index: 索引 redis.lindex('list', 1) 返回key为list的列表index为1的元素 b'2'
lset(name, index, value) 给key为name的list中index位置的元素赋值,越界则报错 name: key名 index: 索引位置 value: 值 redis.lset('list', 1, 5) 将key为list的list索引1位置赋值为5 True
lrem(name, count, value) 删除count个key的list中值为value的元素 name: key名 count: 删除个数 value: 值 redis.lrem('list', 2, 3) 将key为list的列表删除2个3 1,即删除的个数
lpop(name) 返回并删除key为name的list中的首元素 name: key名 redis.lpop('list') 返回并删除名为list的list第一个元素 b'5'
rpop(name) 返回并删除key为name的list中的尾元素 name: key名 redis.rpop('list') 返回并删除名为list的list最后一个元素 b'2'
blpop(keys, timeout=0) 返回并删除名称为在keys中的list中的首元素,如果list为空,则会一直阻塞等待 keys: key列表 timeout: 超时等待时间,0为一直等待 redis.blpop('list') 返回并删除名为list的list的第一个元素 [b'5']
brpop(keys, timeout=0) 返回并删除key为name的list中的尾元素,如果list为空,则会一直阻塞等待 keys: key列表 timeout: 超时等待时间,0为一直等待 redis.brpop('list') 返回并删除名为list的list的最后一个元素 [b'2']
rpoplpush(src, dst) 返回并删除名称为src的list的尾元素,并将该元素添加到名称为dst的list的头部 src: 源list的key dst: 目标list的key redis.rpoplpush('list', 'list2') 将key为list的list尾元素删除并返回并将其添加到key为list2的list头部 b'2'

7. Set操作

Set,即集合。Redis 还提供了集合存储,集合中的元素都是不重复的,用法总结如下:

方法 作用 参数说明 示例 示例说明 示例结果
sadd(name, *values) 向key为name的set中添加元素 name: key名 values: 值,可为多个 redis.sadd('tags', 'Book', 'Tea', 'Coffee') 向key为tags的set中添加Book、Tea、Coffee三个内容 3,即插入的数据个数
srem(name, *values) 从key为name的set中删除元素 name: key名 values: 值,可为多个 redis.srem('tags', 'Book') 从key为tags的set中删除Book 1,即删除的数据个数
spop(name) 随机返回并删除key为name的set中一个元素 name: key名 redis.spop('tags') 从key为tags的set中随机删除并返回该元素 b'Tea'
smove(src, dst, value) 从src对应的set中移除元素并添加到dst对应的set中 src: 源set dst: 目标set value: 元素值 redis.smove('tags', 'tags2', 'Coffee') 从key为tags的set中删除元素Coffee并添加到key为tags2的set True
scard(name) 返回key为name的set的元素个数 name: key名 redis.scard('tags') 获取key为tags的set中元素个数 3
sismember(name, value) 测试member是否是key为name的set的元素 name:key值 redis.sismember('tags', 'Book') 判断Book是否为key为tags的set元素 True
sinter(keys, *args) 返回所有给定key的set的交集 keys: key列表 redis.sinter(['tags', 'tags2']) 返回key为tags的set和key为tags2的set的交集 {b'Coffee'}
sinterstore(dest, keys, *args) 求交集并将交集保存到dest的集合 dest:结果集合 keys:key列表 redis.sinterstore('inttag', ['tags', 'tags2']) 求key为tags的set和key为tags2的set的交集并保存为inttag 1
sunion(keys, *args) 返回所有给定key的set的并集 keys: key列表 redis.sunion(['tags', 'tags2']) 返回key为tags的set和key为tags2的set的并集 {b'Coffee', b'Book', b'Pen'}
sunionstore(dest, keys, *args) 求并集并将并集保存到dest的集合 dest:结果集合 keys:key列表 redis.sunionstore('inttag', ['tags', 'tags2']) 求key为tags的set和key为tags2的set的并集并保存为inttag 3
sdiff(keys, *args) 返回所有给定key的set的差集 keys: key列表 redis.sdiff(['tags', 'tags2']) 返回key为tags的set和key为tags2的set的差集 {b'Book', b'Pen'}
sdiffstore(dest, keys, *args) 求差集并将差集保存到dest的集合 dest:结果集合 keys:key列表 redis.sdiffstore('inttag', ['tags', 'tags2']) 求key为tags的set和key为tags2的set的差集并保存为inttag 3
smembers(name) 返回key为name的set的所有元素 name: key名 redis.smembers('tags') 返回key为tags的set的所有元素 {b'Pen', b'Book', b'Coffee'}
srandmember(name) 随机返回key为name的set的一个元素,但不删除元素 name: key值 redis.srandmember('tags') 随机返回key为tags的set的一个元素

8. Sorted Set操作

Sorted Set,即有序集合,它相比集合多了一个分数字段,利用它我们可以对集合中的数据进行排序,其用法总结如下:

方法 作用 参数说明 示例 示例说明 示例结果
zadd(name, args, *kwargs) 向key为name的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序 name: key名 args: 可变参数 redis.zadd('grade', 100, 'Bob', 98, 'Mike') 向key为grade的zset中添加Bob,score为100,添加Mike,score为98 2,即添加的元素个数
zrem(name, *values) 删除key为name的zset中的元素 name: key名 values: 元素 redis.zrem('grade', 'Mike') 从key为grade的zset中删除Mike 1,即删除的元素个数
zincrby(name, value, amount=1) 如果在key为name的zset中已经存在元素value,则该元素的score增加amount,否则向该集合中添加该元素,其score的值为amount name: key名 value: 元素 amount: 增长的score值 redis.zincrby('grade', 'Bob', -2) key为grade的zset中Bob的score减2 98.0,即修改后的值
zrank(name, value) 返回key为name的zset中元素的排名(按score从小到大排序)即下标 name: key名 value: 元素值 redis.zrank('grade', 'Amy') 得到key为grade的zset中Amy的排名 1
zrevrank(name, value) 返回key为name的zset中元素的倒数排名(按score从大到小排序)即下标 name: key名 value: 元素值 redis.zrevrank('grade', 'Amy') 得到key为grade的zset中Amy的倒数排名 2
zrevrange(name, start, end, withscores=False) 返回key为name的zset(按score从大到小排序)中的index从start到end的所有元素 name: key值 start: 开始索引 end: 结束索引 withscores: 是否带score redis.zrevrange('grade', 0, 3) 返回key为grade的zset前四名元素 [b'Bob', b'Mike', b'Amy', b'James']
zrangebyscore(name, min, max, start=None, num=None, withscores=False) 返回key为name的zset中score在给定区间的元素 name:key名 min: 最低score max:最高score start: 起始索引 num: 个数 withscores: 是否带score redis.zrangebyscore('grade', 80, 95) 返回key为grade的zset中score在80和95之间的元素 [b'Amy', b'James']
zcount(name, min, max) 返回key为name的zset中score在给定区间的数量 name:key名 min: 最低score max: 最高score redis.zcount('grade', 80, 95) 返回key为grade的zset中score在80到95的元素个数 2
zcard(name) 返回key为name的zset的元素个数 name: key名 redis.zcard('grade') 获取key为grade的zset中元素个数 3
zremrangebyrank(name, min, max) 删除key为name的zset中排名在给定区间的元素 name:key名 min: 最低位次 max: 最高位次 redis.zremrangebyrank('grade', 0, 0) 删除key为grade的zset中排名第一的元素 1,即删除的元素个数
zremrangebyscore(name, min, max) 删除key为name的zset中score在给定区间的元素 name:key名 min: 最低score max:最高score redis.zremrangebyscore('grade', 80, 90) 删除score在80到90之间的元素 1,即删除的元素个数

9. Hash操作

Hash,即哈希。Redis 还提供了哈希表的数据结构,我们可以用name指定一个哈希表的名称,然后表内存储了各个键值对,用法总结如下:

方法 作用 参数说明 示例 示例说明 示例结果
hset(name, key, value) 向key为name的hash中添加映射 name: key名 key: 映射键名 value: 映射键值 hset('price', 'cake', 5) 向key为price的hash中添加映射关系,cake的值为5 1,即添加的映射个数
hsetnx(name, key, value) 向key为name的hash中添加映射,如果映射键名不存在 name: key名 key: 映射键名 value: 映射键值 hsetnx('price', 'book', 6) 向key为price的hash中添加映射关系,book的值为6 1,即添加的映射个数
hget(name, key) 返回key为name的hash中field对应的value name: key名 key: 映射键名 redis.hget('price', 'cake') 获取key为price的hash中键名为cake的value 5
hmget(name, keys, *args) 返回key为name的hash中各个键对应的value name: key名 keys: 映射键名列表 redis.hmget('price', ['apple', 'orange']) 获取key为price的hash中apple和orange的值 [b'3', b'7']
hmset(name, mapping) 向key为name的hash中批量添加映射 name: key名 mapping: 映射字典 redis.hmset('price', {'banana': 2, 'pear': 6}) 向key为price的hash中批量添加映射 True
hincrby(name, key, amount=1) 将key为name的hash中映射的value增加amount name: key名 key: 映射键名 amount: 增长量 redis.hincrby('price', 'apple', 3) key为price的hash中apple的值增加3 6,修改后的值
hexists(name, key) key为namehash中是否存在键名为key的映射 name: key名 key: 映射键名 redis.hexists('price', 'banana') key为price的hash中banana的值是否存在 True
hdel(name, *keys) key为namehash中删除键名为key的映射 name: key名 key: 映射键名 redis.hdel('price', 'banana') 从key为price的hash中删除键名为banana的映射 True
hlen(name) 从key为name的hash中获取映射个数 name: key名 redis.hlen('price') 从key为price的hash中获取映射个数 6
hkeys(name) 从key为name的hash中获取所有映射键名 name: key名 redis.hkeys('price') 从key为price的hash中获取所有映射键名 [b'cake', b'book', b'banana', b'pear']
hvals(name) 从key为name的hash中获取所有映射键值 name: key名 redis.hvals('price') 从key为price的hash中获取所有映射键值 [b'5', b'6', b'2', b'6']
hgetall(name) 从key为name的hash中获取所有映射键值对 name: key名 redis.hgetall('price') 从key为price的hash中获取所有映射键值对 {b'cake': b'5', b'book': b'6', b'orange': b'7', b'pear': b'6'}

10. RedisDump

RedisDump 提供了强大的 Redis 数据的导入和导出功能,本节我们来看下它的具体用法。

首先确保已经安装好了 RedisDump。

RedisDump 提供两个可执行命令,redis-dump 用于导出数据,redis-load 用于导入数据。

redis-dump

我们可以首先输入如下命令查看所有可选项:

redis-dump -h

运行结果如下:

Usage: redis-dump [global options] COMMAND [command options] 
    -u, --uri=S                      Redis URI (e.g. redis://hostname[:port])
    -d, --database=S                 Redis database (e.g. -d 15)
    -s, --sleep=S                    Sleep for S seconds after dumping (for debugging)
    -c, --count=S                    Chunk size (default: 10000)
    -f, --filter=S                   Filter selected keys (passed directly to redis' KEYS command)
    -O, --without_optimizations      Disable run time optimizations
    -V, --version                    Display version
    -D, --debug
        --nosafe

可以看到其参数,-u 代表 Redis 连接字符串,-d 代表数据库代号,默认全部,-s 代表导出之后的休眠时间,-c 代表分块大小,默认是 10000,-f 代表导出时的过滤器,-O 代表禁用运行时优化,-V 显示版本,-D 开启调试。

我们拿本地的 Redis 做测试,运行在 6379 端口上,密码为 foobared,导出命令如下:

redis-dump -u :foobared@localhost:6379

如果没有密码的话可以不加密码前缀,命令如下:

redis-dump -u localhost:6379

运行之后可以将本地 0-15号 数据库的所有数据输出出来,例如:

{"db":0,"key":"name","ttl":-1,"type":"string","value":"James","size":5}
{"db":0,"key":"name2","ttl":-1,"type":"string","value":"Durant","size":6}
{"db":0,"key":"name3","ttl":-1,"type":"string","value":"Durant","size":6}
{"db":0,"key":"name4","ttl":-1,"type":"string","value":"HelloWorld","size":10}
{"db":0,"key":"name5","ttl":-1,"type":"string","value":"James","size":5}
{"db":0,"key":"name6","ttl":-1,"type":"string","value":"James","size":5}
{"db":0,"key":"age","ttl":-1,"type":"string","value":"1","size":1}
{"db":0,"key":"age2","ttl":-1,"type":"string","value":"-5","size":2}

每条数据都包含五个字段,db 即数据库代号,key 即键名,ttl 即该键值对的有效时间,type 即键值类型,size 即占用空间。

如果想要将其输出为 Json 行文件,可以使用如下命令:

redis-dump -u :foobared@localhost:6379 > ./redis_data.jl

这样我们就可以成功将 Redis 的所有数据库的所有数据导出成 Json 行文件了。

另外我们可以使用 -d 参数指定某个数据库的导出,例如只导出 1 号数据库的内容:

redis-dump -u :foobared@localhost:6379 -d 1 > ./redis.data.jl

如果只想导出特定的内容,如想导出 adsl 开头的数据,可以加入 -f 参数用来过滤,命令如下:

redis-dump -u :foobared@localhost:6379 -f adsl:* > ./redis.data.jl

其中 -f 的参数即 Redis 的 keys 命令的参数,可以写一些过滤规则。

redis-load

我们同样可以首先输入如下命令查看所有可选项:

redis-load -h

运行结果如下:

redis-load --help
  Try: redis-load [global options] COMMAND [command options] 
    -u, --uri=S                      Redis URI (e.g. redis://hostname[:port])
    -d, --database=S                 Redis database (e.g. -d 15)
    -s, --sleep=S                    Sleep for S seconds after dumping (for debugging)
    -n, --no_check_utf8
    -V, --version                    Display version
    -D, --debug
        --nosafe

可以看到其参数,-u 代表 Redis 连接字符串,-d 代表数据库代号,默认全部,-s 代表导出之后的休眠时间,-n 代表不检测 UTF-8 编码,-V 显示版本,-D 开启调试。

我们可以将 Json 行文件导入到 Redis 数据库中:

< redis_data.json redis-load -u :foobared@localhost:6379

这样就可以成功将 Json 行文件导入到数据库中了。

另外如下命令同样可以达到同样的效果:

cat redis_data.json | redis-load -u :foobared@localhost:6379
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎

以上便是 RedisDump 的使用概述,使用它我们可以高效便捷地实现 Redis 数据库的导入导出。

11. 结语

本节我们了解了 RedisPy 对 Redis 数据库的一些基本操作,另外还了解了 RedisDump 对数据导入导出做了演示,由于其便捷和高效性,在后文我们会利用 Redis 实现很多架构,如维护代理池、Cookies 池、ADSL 拨号代理池、ScrapyRedis 分布式架构等,所以 Redis 的操作需要好好掌握。

추천

출처blog.51cto.com/14445003/2426851