>  기사  >  데이터 베이스  >  Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

coldplay.xixi
coldplay.xixi앞으로
2021-02-23 09:54:222087검색

Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

권장(무료): redis 튜토리얼

Article Directory

  • 1. Redis 게시 및 구독 소개
  • 3. 레디스에서
  • 4. 전송 기능 - Redis 트랜잭션 데모
  • 5. 전송 기능 업그레이드 버전 - 보기
  • 6. 트랜잭션 오류 처리
  • 비즈니스 로직 오류
    • 구문 오류
    7. Redis 지속성
  • RDB persistence
    • AOF persistence

1. Redis 게시 및 구독 소개

Redis 게시 및 구독(pub/sub)은 메시지 통신 모델입니다. 발신자(pub)가 메시지를 보내고, 구독자(sub)가 메시지를 받습니다. Redis 클라이언트는 원하는 수의 채널을 구독할 수 있습니다.

Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

응용 시나리오:

①일반 인스턴트 채팅, 그룹 채팅 및 기타 기능과 같은 실시간 메시징 시스템을 구축합니다.
  • ②블로그 웹사이트에는 n명의 팬이 당신을 구독하고 있습니다. 새 글을 게시하면 팬들에게 푸시할 수 있습니다. 构建实时消息系统,比如普通的即时聊天,群聊等功能。
  • ②在一个博客网站中,有n多个粉丝订阅了你,当你发布新文章,就可以推送消息给粉丝们。
  • 微信公众号模式

二、Redis发布订阅演示

发布订阅语法
订阅频道:

  • subscribe channel1 [channel2 ...]     订阅给定的一个或多个频道的信息

  • psubscribe pattern1 [pattern2 ...]    订阅一个或多个符合给定模式的频道。
    Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.
    发布频道:

  • publish channel message           将信息发送到指定的频道。
    Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.
    Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.
    退订频道:

  • unsubscribe channel1 [ channel2 ...]    指退订给定的频道。

  • punsubscribe pattern1 [pattern2 ...]   退订所有给定模式的频道。
    Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

三、Redis中的事务

Redis 事务可以一次执行多个命令,(按顺序地串行化执行,执行中不会被其它命令插入,不许加塞)

事务应用场景:

  • 商品秒杀
  • 转账

两个特点:

  • Redis会将一个事务中的所有命令序列化,然后按顺序执行(任意命令执行失败,其余的命令依然被执行)
  • 执行中不会被其它命令插入,不许出现加赛行为。

一个事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务。

事务相关命令:
multi      标记一个事务块的开始。
exec      执行所有事务块内的命令。
discard     取消事务,放弃执行事务块内的所有命令。
watch key    监视一个(或多个)key,如果在事务执行之前这个(或这些)key被其他命令所改动,那么事务将被打断。
unwatch     取消watch命令对所有key的监视。

四、转账功能-Redis事务演示

需求:转帐功能,A向B帐号转帐50元。

  • 转账前A有80元,B有10元。
  • 转账后A有30元,B有60元。

本例先以multi开始一个事务,然后将多个命令入队到事务中,最后由 exec命令触发事务。

  • 输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行。
  • 直到输入Exec后,Redis会将之前的命令队列中的命令依次执行。
    Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.
    执行exec前,如果发现添加的命令有问题,可以使用discard
  • 3WeChat 공개 계정 모드.

2. Redis 게시 및 구독 데모

게시 및 구독 구문🎜
채널 구독: 🎜🎜🎜🎜subscribe 채널1 [channel2...] 여러 항목에 대한 정보 채널 🎜🎜🎜🎜psubscribe 패턴1 [pattern2 ...]  주어진 패턴과 일치하는 하나 이상의 채널을 구독합니다.
여기에 이미지 설명 삽입
게시 채널: 🎜🎜🎜🎜채널 메시지 게시                                 주위에 Over in in can in on in in 메시지가 표시됩니다.
여기에 이미지 설명 삽입

채널 구독 취소: 🎜 🎜🎜🎜채널1 구독 취소 [ 채널2 ...]  특정 채널의 구독 취소를 의미합니다. 🎜🎜🎜🎜punsubscribe 패턴1 [pattern2 ...]  해당 패턴의 모든 채널에서 구독을 취소합니다.
여기에 이미지 설명 삽입🎜🎜🎜🎜 🎜 3. Redis의 트랜잭션🎜🎜🎜Redis 트랜잭션은 한 번에 여러 명령을 실행할 수 있습니다(순차 실행, 실행 중에 다른 명령이 삽입되지 않으며 차단이 허용되지 않음)🎜🎜🎜트랜잭션 적용 시나리오: 🎜🎜🎜 🎜 🎜제품 깜짝 세일🎜🎜🎜🎜Transfer🎜🎜🎜🎜🎜두 가지 기능: 🎜🎜🎜🎜Redis는 트랜잭션의 모든 명령을 직렬화한 다음 순서대로 실행합니다(명령이 실행되지 않으면 나머지 명령은 계속 실행됩니다) ) )🎜🎜실행 중 다른 명령에 의해 삽입되지 않으며, 추가 게임도 허용되지 않습니다. 🎜🎜🎜트랜잭션은 시작부터 실행까지 트랜잭션 시작, 명령 엔큐, 트랜잭션 실행의 세 단계를 거칩니다. 🎜🎜🎜거래 관련 명령어:🎜
multi   거래 블록의 시작을 표시합니다.
exec 트랜잭션 블록 내의 모든 명령을 실행합니다.
discard 트랜잭션을 취소하고 트랜잭션 블록의 모든 명령 실행을 포기합니다.
watch key 하나 이상의 키를 모니터링합니다. 트랜잭션이 실행되기 전에 이 키(또는 이러한 키)가 다른 명령에 의해 수정되면 트랜잭션이 중단됩니다.
unwatch watch 명령으로 모든 키의 모니터링을 취소합니다. 🎜🎜🎜4. 이체 기능 - Redis 거래 시연🎜🎜🎜🎜요구 사항: 이체 기능, A가 B 계좌로 50위안을 이체합니다. 🎜🎜🎜이전 전 A는 80위안, B는 10위안을 가지고 있었습니다. 🎜🎜이체 후 A는 30위안, B는 60위안을 받았습니다. 🎜🎜🎜🎜이 예에서는 multi로 트랜잭션을 시작한 다음 여러 명령을 트랜잭션의 대기열에 추가하고 마지막으로 exec 명령으로 트랜잭션을 트리거합니다. 🎜🎜🎜Multi 명령을 입력하여 시작합니다. 입력된 명령은 명령 대기열에 하나씩 입력되지만 실행되지는 않습니다. 🎜🎜Exec이 입력될 때까지 Redis는 이전 명령 대기열의 명령을 순차적으로 실행합니다.
여기에 이미지 설명 삽입
이전 exec를 실행할 때 추가된 명령에 문제가 있는 것을 발견하면 MySQL의 롤백 작업과 유사하게 discard 명령을 사용하여 대기열 작업을 중단할 수 있습니다. 🎜🎜🎜🎜 5. 이체 기능 업그레이드 버전-watch🎜🎜🎜🎜 요구 사항: 트랜잭션 내에서 계정이 작동하기 전에 다른 프로세스가 계정을 작동합니다. 🎜

위의 전송은 실행 중에 계정 a 또는 b에서 작동하는 다른 명령이 있는 경우 팬텀 읽기가 발생할 수 있습니다. 트랜잭션이 실행되면 다른 명령이 나타날 때 해당 계정을 모니터링하는 것이 해결책입니다. 계정 a 또는 b에서 작동하면 프로그램이 직접 오류를 보고하고 롤백합니다.

Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

watch 명령을 실행한 후 exec 또는 discard 명령이 먼저 실행되면 unwatch를 실행할 필요가 없습니다. watch 명령을 취소하십시오. exec 또는 Discard 명령이 자동으로 모니터링을 취소하므로 키가 모니터링됩니다. execdiscard命令先被执行,就不需要再执行unwatch来取消对key的监视了,因为exec或discard命令会自动取消监视。

六、事务的错误处理

业务逻辑错误

发生业务逻辑错误:只有报错的命令不会被执行,而其它的命令都会执行,不会回滚。
Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

语法错误

发生语法错误:执行时整个的所有队列都会被取消。
Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.

七、Redis持久化

数据存放在内存:高效、但断电内存数据会丢失。
数据存放在硬盘:读写速度慢于内存、但断电数据不会丢失。

RDB持久化

RDB是redis的默认持久化机制。RDB相当于照快照,保存的是数据的一种状态。(几十G的数据可以保存为几KB的快照)

快照是默认的持久化方式。这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb(存在redis.conf文件中)。

优点:

  • 快照保存数据极快、还原数据极快
  • 适用于灾难备份

缺点:

  • 小内存机器不适合使用,RDB机制符合要求就会照快照,占内存。

AOF持久化

由于快照方式是在一定间隔时间做一次的,所以如果redis 意外宕机,就会丢失最后一次快照后的所有修改。如果应用要求不能丢失任何修改的话,可以采用AOF(Append-Only File)持久化方式。

appendonly yes 命令可以启用 AOF 持久化方式。

有三种方式如下(默认是:每秒 fsync 一次)

  • appendfsync always     收到写命令就立即写入磁盘,最慢,但是保证完全的持久化
  • appendfsync everysec    每秒钟写入磁盘一次,在性能和持久化方面做了很好的折中
  • appendfsync no
6. 트랜잭션 오류 처리


비즈니스 논리 오류

비즈니스 논리 오류 발생: 오류를 보고하는 명령만 실행되지 않고 다른 명령은 실행되며 롤백되지 않습니다. 여기에 이미지 설명 삽입

구문 오류

🎜🎜구문 오류가 발생했습니다. 실행 중에 모든 대기열이 취소됩니다. 🎜🎜여기에 이미지 설명 삽입🎜🎜🎜 7. Redis 지속성 🎜🎜🎜데이터는 메모리에 저장됩니다. 효율적이지만 전원이 꺼지면 메모리 데이터가 손실됩니다. 🎜 데이터는 하드 디스크에 저장됩니다. 읽기 및 쓰기 속도는 메모리보다 느리지만 전원이 꺼져도 데이터는 손실되지 않습니다. 🎜🎜🎜RDB 지속성🎜🎜🎜RDB는 Redis의 기본 지속성 메커니즘입니다. RDB는 데이터 상태를 저장하는 스냅샷을 만드는 것과 같습니다. (수십 기가바이트의 데이터를 몇 KB의 스냅샷으로 저장할 수 있습니다.) 🎜🎜스냅샷은 기본 지속성 방법입니다. 메모리에 있는 데이터를 스냅샷 형태로 바이너리 파일에 쓰는 방법입니다. 기본 파일 이름은 dump.rdb(redis.conf 파일에 저장됨)입니다. 🎜🎜장점: 🎜
  • 스냅샷은 데이터를 매우 빠르게 저장하고 데이터를 매우 빠르게 복원합니다🎜
  • 재난 백업에 적합🎜🎜🎜단점: 🎜
    • 소형 메모리 머신은 사용하기에 적합하지 않습니다. RDB 메커니즘 요구 사항이 충족되면 스냅샷이 생성되어 메모리를 차지합니다. 🎜🎜🎜🎜AOF 지속성🎜🎜🎜스냅샷 방식은 일정한 간격으로 이루어지기 때문에 redis가 예기치 않게 다운되면 마지막 스냅샷 이후의 모든 수정 사항은 손실됩니다. 응용 프로그램에서 수정 사항이 손실될 수 없도록 요구하는 경우 AOF(Append-Only File) 지속성 방법을 사용할 수 있습니다. 🎜🎜appendonly yes 명령은 AOF 지속성을 활성화할 수 있습니다. 🎜🎜다음과 같은 세 가지 방법이 있습니다. (기본값: 초당 한 번씩 fsync) 🎜
      • appendfsync Always   쓰기 명령을 받은 직후 디스크에 쓰기 명령을 쓰는데, 가장 느립니다. , 하지만 완전한 지속성을 보장합니다. 🎜
      • appendfsync Everysec   1초에 한 번씩 디스크에 기록하여 성능과 지속성 사이를 적절하게 절충합니다.🎜
      • appendfsync no   OS는 최고의 성능을 제공하지만 지속성은 보장되지 않습니다. 🎜🎜🎜🎜장점: 🎜🎜 AOF는 스냅샷 방식보다 지속성이 더 좋습니다. AOF 지속성 방식을 사용할 때: 🎜redis는 수신된 모든 명령을 다음을 통해 파일에 추가합니다. 쓰기 기능(기본값은appendonly.aof). Redis가 재시작되면 파일에 저장된 쓰기 명령을 다시 실행하여 전체 데이터베이스의 내용을 메모리에 재구축합니다. 🎜🎜🎜🎜단점: 🎜🎜🎜AOF 방식은 또 다른 문제를 가져옵니다. 영구 파일은 점점 더 커지며 🎜하드 디스크를 차지합니다🎜. 예를 들어, incr test 명령을 100번 호출하면 100개의 명령이 모두 파일에 저장되어야 하며 실제로 그 중 99개는 중복됩니다. 🎜

위 내용은 Redis 게시 및 구독 데모, 트랜잭션 데모 및 지속성에 대해 설명합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제