【Redis】【Python3】Redis-Server의 인스톨과 Python으로 실시하는 publish/subscribe

12420 단어 RedisPython3

0. 소개



Redis는 간단하게 말하면 NoSQL의 데이터베이스 서버이다.
간단한 메시지 기능인 publish/subscribe(Android에서 비유한다면 Intent적인 것)를 가지고 있다.

Redis-Server 설치 및 publish/subscribe에 대해 설명합니다.

1. 설치



설치



다음 명령으로 설치할 수 있습니다.
$ sudo apt-get update
$ sudo apt-get install redis-server

동작 확인



서버 버전 확인
$ redis-server -v

클라이언트 버전 확인
$ redis-cli -v

2. publish/subscribe



Redis-py 설치



아래에 파이썬에서 Redis를 다루는 샘플을 썼지만, 여기에는 Redis-py를 설치해야합니다.
$ pip3 install redis

publish



publish는 지정된 채널에 메시지를 던지는 조작.
참조 → htps : // / ぢ s. 이오 / 코만 ds / 푸 b sh
$ redis-cli
> publish channel message

당연히 채널과 메시지는 자유롭게 설정할 수 있습니다.
여기서 보낸 메시지는 DB에 저장되지 않습니다.
다음은 이것을 Python에서 수행하는 샘플입니다.

publish_test.py
import redis
import time

host = 'localhost'
port = 6379

def run_publish(loopCount):
    # redisに接続
    connect = redis.StrictRedis(host=host, port=port)

    for i in range(loopCount):
        # publish
        connect.publish('publish', 'xxxxx')
        time.sleep(1)

if __name__ == '__main__':
    run_publish(10)

publish () 함수의 첫 번째 인수로 전송할 채널을 지정하고 두 번째 인수로 메시지를 지정합니다.
하고 있는 것은 이하의 커멘드를 10회 송신하고 있을 뿐.
> publish publish xxxxx

subscribe



subscribe 는 지정한 채널에 던진 메시지를 취득하는 조작.
참조 → htps : // / ぢ s. 이오 / こまんds / す bsc 리베
$ redis-cli
> subscribe channel

모니터링을 시작하기 전에 전송된 메시지는 검색할 수 없습니다.
채널 다음에 다른 채널을 지정하면 동시에 여러 채널을 감시할 수 있다.
다음은 channel01과 channel02라는 2개의 채널을 감시하는 예.
$ redis-cli
> subscribe channel01 channel02

시험에 감시하고 있는 채널에 publish로 메시지를 송신하면 수신할 수 있는 것을 확인할 수 있을 것이다.
(아래에서 3행이 수신한 메시지)
$ redis-cli
> subscribe channel01
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel01"
3) (integer) 1
1) "message"
2) "channel01"
3) "test_message"

그리고 다음이 파이썬에서 수행하는 예.

subscribe_test.py
import redis

host = 'localhost'
port = 6379

def run_subscribe():
    # redisに接続
    connect = redis.StrictRedis(host=host, port=port)
    # Pubsubオブジェクト生成
    pubsub = connect.pubsub()
    # subscribe開始
    pubsub.subscribe(['subscribe'])
    for item in pubsub.listen():
        print(item)
        # 値が"end"ならばsubscribeを終了させる
        # channel、dataはbyte列な場合があるので必要に応じてデコードする
        data = item.get('data')
        if isinstance(data, bytes):
            data = data.decode('utf-8')
        if data == 'end':
            # subscribe終了
            pubsub.unsubscribe()
            break

if __name__ == '__main__':
    run_subscribe()

subscribe() 함수의 인수로 감시할 채널을 지정한다.
이 샘플의 포인트는 수신한 메시지를 디코드하고 있는 것.
이것을 하지 않으면 메시지를 올바르게 처리할 수 없고, 기대한 동작을 하지 않게 된다.
(샘플을 예제로 보내면 스크립트가 종료되지 않음)
subscribe를 끝낼 때는 unsubscribe() 함수를 호출해, 감시를 종료시키는 것을 잊지 않고.

psubscribe



감시하는 채널이 많으면 채널 지정이 번거롭게 된다.
감시 대상의 채널을 패턴 지정할 수있는 커맨드도 준비되어있다.
참조 → htps : // / ぢ s. 이오 / 코만 ds / p bsc 리베
$ redis-cli
> psubscribe pattern

패턴 지정할 수 있으므로, 송신되고 있는 메세지를 모두 감시하는 것도 가능.
(불필요한 메시지가 전송되지 않았는지 등의 테스트에 편리)
$ redis-cli
> psubscribe *

물론 파이썬에서도 사용할 수 있습니다.
(불필요한 채널을 데리러, 고장의 원인이 될 수 있기 때문에 개인적으로는 추천하지 않는다)

psubscribe_test.py
import redis

host = 'localhost'
port = 6379

def run_psubscribe():
    # redisに接続
    connect = redis.StrictRedis(host=host, port=port)
    # Pubsubオブジェクト生成
    pubsub = connect.pubsub()
    # psubscribe開始
    pubsub.psubscribe(['*'])
    for item in pubsub.listen():
        print(item)
        # 値が"end"ならばpsubscribeを終了させる
        # channel、dataはbyte列な場合があるので必要に応じてデコードする
        data = item.get('data')
        if isinstance(data, bytes):
            data = data.decode('utf-8')
        if data == 'end':
            # psubscribe終了
            pubsub.punsubscribe()
            break

if __name__ == '__main__':
    run_psubscribe()

3. 끝에



publish/subscribe는 간단한 내용의 통신을 구현하는데 매우 편리해 보입니다.
(간단하게 실장할 수 있어 통신 내용도 간단하게 들여다보기 위해)

98. 참고



파이썬에서 Redis 처리 (redis-py의 기본) - h tp // w w. 덴조 w. 메/엔트리/2017/10/07/233233
[팁] Python에서 Redis 사용 (8) ~ PUB/SUB ~ - ht tp // 모코타타바 c p. 하나 mblr. 코 m/포 st/81758811694/치 ps-py 흠-% 3% 81% 8B% 에 3% 82% 89-ぢs-에 3% 82% 92% 에 4% BD% BF% 3 % 81 % 86-8-pu bsu b
redis-py - htps : // 기주 b. 코 m / an dym
Command reference – Redis - htps : // / ぢ s. 이오 / 코만 ds

99. 갱신 내역




날짜
변경 내용


2018/02/08

좋은 웹페이지 즐겨찾기