이 글에서는 Python에서 Redis 모듈을 설치하고 사용하는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
【관련 권장사항: Redis 동영상 튜토리얼】
redis 모듈 설치
pip3 install redis
redis -py는 Re dis와 두 가지 클래스를 제공합니다. StrictRedis는 Redis 명령을 구현하는 데 사용되며 대부분의 공식 명령을 구현하고 공식 구문 및 명령을 사용합니다. Redis는 StrictRedis의 하위 클래스이며 이전 버전의 redis-py
import redis conn = redis.Redis(host='127.0.0.1', port=6379) # 可以使用url方式连接到数据库 # conn = Redis.from_url('redis://@localhost:6379/1') conn.set('name', 'LinWOW') print(conn.get('name'))
redis과의 호환성을 위해 사용됩니다. -py는 연결 풀을 사용하여 Redis 서버에 대한 모든 연결을 관리하므로 매번 연결을 설정하고 해제하는 오버헤드를 방지합니다. 기본적으로 각 Redis 인스턴스는 자체 연결 풀을 유지 관리합니다. 연결 풀을 직접 생성한 후 Redis 매개변수로 사용할 수 있으므로 여러 Redis 인스턴스가 연결 풀을 공유할 수 있습니다.
연결 풀: redis_pool.py
from redis import ConnectionPool POOL=ConnectionPool(host='127.0.0.1',port=6379,max_connections=100)
연결 풀 사용: test_redis.py
import redis from redis_pool import POOl conn = redis.Redis(connection_pool=POOl) conn.set('name', 'LinWOW') print(conn.get('name'))
URL 구성 데이터베이스에 연결하려면 다음 세 가지 모드가 있습니다.
redis://[:password]@host:port/db # TCP连接 rediss://[:password]@host:port/db # Redis TCP+SSL 连接 unix://[:password]@/path/to/socket.sock?db=db # Redis Unix Socket 连接
method | function | example | example result |
---|---|---|---|
세트(이름 , value, ex=None, px=None, nx=False, xx=False) | ex, 만료 시간(s), 만료 시간(ms), True로 설정된 경우 이름이 존재하지 않는 경우에만; , 현재 설정 작업만 실행됩니다. 값이 있으면 수정할 수 없으며 실행이 적용되지 않습니다. xx로 설정하면 현재 설정 작업은 값이 존재할 때만 실행됩니다. 값이 없으면 수정되지 않습니다. | setex 및 setnx | |
set(name, value) | 에 이름을 지정하는 것과 같습니다. value | redis.set('name', 'Bob') | True |
get(name ) | 데이터베이스의 키 이름이 있는 문자열 값을 반환 | redis.get('name') | b'Bob' |
getset(name, value) | 데이터베이스 값 값에 키 이름이 포함된 문자열을 할당하고 마지막 값을 반환합니다 | redis.getset('name', 'Mike') | b'Bob' |
mget(keys, *args) | 여러 키에 해당하는 값을 반환 | redis.mget(['name', 'nickname']) | [b'Mike', b' Miker'] |
setnx(name, value) | 키가 존재하지 않는 경우에만 값을 설정하세요 | redis.setnx('newname', 'James') | 처음에는 True, 두 번째에는 False |
setex(name, time, value) | 해당 값을 문자열 형식의 값으로 설정하고 이를 지정합니다. 키 값에 해당하는 유효 기간 | redis.setex('name', 1, 'James' ) | True |
setrange(name, offset, value) | 지정된 키 값의 하위 문자열을 설정합니다 | redis.set('name', 'Hello') redis.setrange('name', 6, 'World') | 11, 수정된 문자열 길이 |
mset(mapping) | 일괄 할당 | redis.mset({'name1': 'Durant', 'name2': 'James'}) | True |
msetnx(mapping) | 키가 하나도 없을 때만 일괄 할당 | redis.msetnx({ 'name3': 'Smith', 'name4': 'Curry'}) | True |
incr(name, amount=1) | key는 name의 부가가치 연산입니다. 기본값은 1입니다. 키가 존재하지 않으면 생성되어 amount | redis.incr('로 설정됩니다. age', 1) | 1, 수정된 값 |
decr(name, amount=1) | key는 name의 값 평가절하 연산으로, 기본값은 1입니다. 키가 없으면 생성됩니다. -amount | redis.decr('age', 1) | -1로 설정합니다. 이는 수정된 값 |
append(key, value) | key는 name입니다. 문자열 값에 다음이 추가됩니다. value | redis.append('nickname', 'OK') | 13, 이는 수정된 문자열 길이 |
substr(name, start, end=-1) | return 키의 하위 문자열입니다. name | redis.substr('name', 1, 4) | b'ello' |
getrange(key, start, end) | start에서 키 값 가져오기 end | redis.getrange('이름', 1, 4) | b'ello' |
Method | Function | Example | Example result |
---|---|---|---|
exists(name) | key 존재 여부 판단 | redis.exists('이름' ) | True |
delete(이름) | 키 삭제 | redis.delete('name') | 1 |
type(이름) | 키 유형 결정 | redis.type('name' ) | b'string' |
keys(pattern) | 규칙과 일치하는 모든 키 가져오기 | redis.keys('n*') | [b'name'] |
randomkey() | 임의의 키 가져오기 | randomkey() | b'name' |
rename(src, dst) | 키 이름 바꾸기 | redis.rename('name', 'nickname') | True |
dbsize() | 현재 데이터베이스의 키 수를 가져옵니다 | dbsize() | 100 |
expire(name, time) | 키 만료 시간을 초 단위로 설정 | redis. 만료( 'name', 2) | True |
ttl(name) | 키의 만료 시간을 초 단위로 가져옵니다. -1은 만료되지 않음을 의미합니다 | redis.ttl('name') | -1 |
move(name, db) | 키를 다른 데이터베이스로 이동 | move('name', 2) | True |
flushdb() | 현재 선택한 데이터베이스의 모든 키 삭제 | flushdb( ) | True |
flushall() | 모든 데이터베이스의 모든 키를 삭제합니다. | flushall() | True |
방법 | 함수 | 예 | 결과 예 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
rpush(name, *values) | 키 이름과 함께 목록 끝에 값이 있는 요소를 추가하세요. 여러 개의 | redis.rpush('list를 전달할 수 있습니다. ', 1, 2, 3) | 3 )4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.lrange('list', 1, 3) | [b'3', b'2', b'1'] | ltrim(name, start, end) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ltrim('list', 1, 3) | True | lindex(name, index) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.lindex('list', 1) | b'2' | lset(name, index, value) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.lset(' list', 1, 5) | True | lrem(name, count, value) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.lrem('list', 2, 3인 요소) ) | 1, 즉 삭제된 요소의 수 | lpop(name) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.lpop('list') | b'인 목록의 첫 번째 요소를 반환하고 삭제합니다. 5' | rpop(name) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.rpop('list') | b'2' | blpop(keys, timeout= 0) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.blpop( 'list') | [b'5'] | brpop(keys, timeout=0) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.brpop('list') | [b '2'] | rpoplpush(src, dst) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
redis.rpoplpush('list' , 'list2') | b'2' | 应用场景: blpop实现简单分布式爬虫: 多个url放到列表里,往里不停放URL,程序循环取值,但是只能一台机器运行取值,可以把url放到redis中,多台机器从redis中取值,爬取数据,实现简单分布式
自定义增量迭代: 由于redis类库中没有提供对列表元素的增量迭代,如果想要循环name对应的列表的所有元素,那么就需要: 1、获取name对应的所有列表 2、循环列表 但是,如果列表非常大,那么就有可能在第一步时就将程序的内容撑爆,所有有必要自定义一个增量迭代的功能: import redis conn=redis.Redis(host='127.0.0.1',port=6379) # conn.lpush('test',*[1,2,3,4,45,5,6,7,7,8,43,5,6,768,89,9,65,4,23,54,6757,8,68]) # conn.flushall() def scan_list(name,count=2): index=0 while True: data_list=conn.lrange(name,index,count+index-1) if not data_list: return index+=count for item in data_list: yield item print(conn.lrange('test',0,100)) for item in scan_list('test',5): print('---') print(item) 로그인 후 복사 Set操作
redis.zadd('grade', 100, 'Bob', 98, 'Mike')2를 업데이트합니다. 이는 추가된 요소의 수
hset( 'price', 'cake', 5)1, 즉 추가된 매핑 수
|