05. 레디 스의 업무

레디 스 업무

레디 스 지원 서비스 작업. 트랜잭션 작업에 포함 된 원자 트랜잭션을 가진 원자는, 실행 중 하나를 성공하거나 모두 실패한다. 그러나 레디 스 롤백은 지원되지 않습니다,하지만 당신은 테스트 개발 분야의 오 조작을 방지 할 수 있습니다. 라고 할 수는 뒤에 이유를 보면, 지원의 절반 원자이다.
여러 번 우리는 트랜잭션 작업을해야합니다.
번역기 파일 : https://redis.io/topics/transactions
연습 : 파이썬 버전 참조
https://github.com/7Edge/redis-demo/blob/master/redis_pipeline.py

사무

MULTI는 EXEC는 버리고 시계 작업은 기본 운영 레디 스 업무입니다. 이들 동작은 원자 동작의 실행과 같은 일련의 작업을 허용한다. , 할 수 있었던 것 두 가지 중요한 안전 장치 때문에 :

1. 명령 주문

트랜잭션의 모든 명령은 질서 정연하고, 실행은 실행 순서입니다. 다른 클라이언트 연결 오류가 발생하면 현재 실행중인 트랜잭션에 영향을 미칠 가능성이 없습니다. 이 명령 실행이 운영 격리되도록합니다. 그것은 단일 스레드 및 redisserver 사용 I / O를 다중화 프로세스가 동시 접속하기 때문이다.

2. 항상 원자

트랜잭션에서 중 전체 명령을 실행하거나 실행하지 않은 명령, 레디 스 거래는 원자이다. 실행 명령은 다중 명령을 호출하기 전에, 서버 측 접속을 클라이언트가 연결되어 있지 않을 경우에는 동작이 실행되지 않으며, 순서 실행 된 모든 트랜잭션 온 상기 실행 명령이 실행 된 경우, 모든 동작들이 수행 될 것이다 . 구성은, 레디 스 만들 경우 전용의 첨부 파일을 사용하여 단일 쓰기 (2) 시스템 콜은 AOF 파일에 기록. 레디 스 서버 충돌하거나이 관리자를 죽일 강제 경우, 작업의 다음 부분 만 등록 할 수 있으며,이 경우, 다시 시작이 경우 시작 및 종료하는 데 실패 발견 할 것이다 레디 스는 오류를보고했습니다. 그럼 우리가해야 레디 스 - 체크 AOF 도구를 사용하여 , 도구가 AOF 파일을 복구 할 트랜잭션의 일부를 삭제 한 다음 레디 스 캔을 다시 시작합니다.

열기 사용하여 거래

1. 执行MULTI  # 开启事务, 返回OK或者其它
2. 执行多个命令  # 事务中的操作, 返回QUEUED,表明加入事务命令队列
3. EXEC  # 执行,返回每个事务中命令的返回结果列表

4. DISCARD 如果在EMULTI之后EXEC之前要关闭事务,再EXEC之前执行即可flush所有事务命令队列中的命令并关闭事务

레디 스 트랜잭션 오류가 발생합니다

트랜잭션, 일부 작업이 발생할 수 또는 실행 오류, 명령 실행 오류는 기본적으로 두 가지이다 :

전에 잘못된 1. EXEC

exec 명령 앞에 실수는 명령이 성공적으로 큐에 추가되지 않고있다. 예를 들면 : 같은 잘못된 명령 이름을 사용하여 같은 매개 변수의 명령 수가 잘못되었습니다.

명령을 실행하는 동안 성공적인 복귀가 다른 반환이 잘못 가입 지시 대기중인 경우, 사실, 명령 대기열에 추가하기 때문에이 오류를 들어, 클라이언트가 인식 할 수있다. 이 오류는 대부분 클라이언트가 자동으로 거래를 중단하고 업무를 무시합니다. (파이썬 레디 스 모듈 인해 배관과 결합 된 다중 / 실행, redis.exceptions.ResponseError 비정상적인로했지만, 더 이상 명령을 여전히 수행 할 수있는 것, 즉, 파이프의 조합에 의한)
그러나, 레디 스 2.6.5 후, 서버가 기록 할 명령 대기열에 누적 오류 명령은 다음 실행 EXEC는, 서버는 트랜잭션을 실행을 거부하고 오류를 반환, 자동으로 폐기됩니다.

오류가 발생에도 불구하고 그러나 Redis2.6.5하기 전에,이 오류를 들어, 서버의 동작은 성공적으로 명령 대기열에 추가 실행되는 명령 집합의 부분 집합의 상응 한 번 실행됩니다. 레디 스 2.6.5 서버가이 논리를 취급하지 않지만, 로직이 새 명령에 명령 파이프 라인 파이프 라인입니다 추가, 행동하기 전에 파이프 라인을 달성 할 수 있으며, 파이프 라인은 명령을 반환 된 결과의 목록을 반환합니다.

오류 2. EXEC 후

실행 오류 후 EXEC 키 충돌 등. 이 오류를 들어, 방법은, 다른 모든 명령이 실행됩니다 처리하지 않는 경우에도 트랜잭션 동안 새 명령 오류가 발생했습니다.

왜 롤 백업을 지원하지 않습니다 잘못?

관계형 데이터베이스와 마찬가지로 트랜잭션 지원을 롤백, 심지어 레디 스의 문제에 실수를 지원합니다. 그런 행동이 왜 레디 스 이유는 두 가지 때문에 :

  1. 레디 스 명령 구문 에러 또는 고장은 잘못된 데이터 형식으로 변형 키 존재할 것이다. 이러한 오류는 개발 또는 테스트 단계에서 아주 쉽게 찾을 수 있습니다.
  2. 이 간단하고 빠르게해야 레디 스, 당신은 다시 용량을 롤백 할 필요가 없습니다.

레디 스 회사 명령의 실행이 큐에 가입 만 만 원자 의미 레디 스 트랜잭션은 명령을 실행하는 동안 롤백 오류를 지원하지 않습니다.

체크인 및-세트에 대한 낙관적 잠금을 레디 스

동시 트랜잭션은 레디 스 읽고 거래 때문에 스레드가 고립 있지만, 동일한 데이터의 시간을 수정해야합니다, 그러나 때때로 우리는 만 제공 낙관적 잠금 레디 스를 사용하여 우리의 데이터를 잠금, 데이터, 전용을 잠그는이 낙관적 잠금이 필요합니다 전용 트랜잭션을 사용하여, 변화가 있다면, 그것은 백 EXEC 실패 수행 트랜잭션 실행 EXEC시에 동작을 확인한다. 시계는 레디 스 업무에 대한 CAS 동작을 제공하는 데 사용됩니다. CAS는 것을, 우리는 종종 낙관적 잠금을 말한다.

낙관적 잠금 거래 당신은 결과를 테스트해야합니다, 실패, 실패 다시 시도합니다.

우리는 트랜잭션 ACID의 4 개 특성을 알고 :

Atomic原子性: 事务中操作集,要么都成功,要么都失败回滚。
Redis事务所指的原子性仅仅只针对将命令加入执行队列的过程,Redis事务不支持在命令执行过程中的错误回滚。

Consistency 一致性: 事务前后,数据库是从一个一致性状态到另一个一致性状态。如转账前后总数是一致的。

Isolation 隔离性: 并发事务时,事务之间都不会由于访问同一数据而被干扰。在这个隔离层面讲,就有多种隔离级别,因为隔离级别时影响并发事务效率和数据安全性的,要在效率和安全间平衡是关键。隔离级别太严格,并发效率低,数据安全;隔离级别太低,又怕数据不安全。

Durability 持久性:事务一旦被提交,改变时永久的,即要持久化。很多都会将事务操作完后追加到操作日志文件中,数据者写入磁盘文件系统持久化。

WATCH 명령은 수정이 실행 EXEC 이전에 발생한 경우 모니터가 다음 트랜잭션이 중단되면 키의 변화, 키를 모니터링하는 데 사용하고, 트랜잭션이 실패했음을 나타내는 널을 반환한다. 거래 전에 데이터를 사용할 수 잠 그려면. 시계 MULTI 및 EXEC로

시청 한 키를 끌어낼 수 주시 해제를 사용합니다.

개요

  1. 레디 스 원자 회사는 단지 명령 실행 큐에 추가하는 과정을 의미, 레디 스 트랜잭션 명령을 실행하는 동안 롤백 오류를 지원하지 않습니다
  2. 데이터는 낙관적 잠금을 사용하여 볼 수 있습니다. 다른 사람 등등 비관적 낙관적 인 캐스.

추천

출처www.cnblogs.com/ZJiQi/p/11550964.html