MST
星途 面试题库

面试题:Redis事务中MULTI、EXEC与DISCARD命令的基本用法

请阐述Redis事务中MULTI、EXEC与DISCARD命令分别的作用,并举例说明如何使用这三个命令实现一个简单的事务操作,例如对一个哈希表进行连续的字段设置操作,然后执行或取消这些操作。
27.1万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试
  1. MULTI命令
    • 作用:用于开启一个事务,它将后续的命令放入队列中,而不是立即执行。在MULTI之后的所有命令会被缓冲,直到EXEC命令被调用才会真正执行。
  2. EXEC命令
    • 作用:执行所有在MULTI开启后放入队列的命令。一旦调用EXEC,Redis会原子性地执行队列中的所有命令,要么全部成功,要么全部失败(如果在事务执行期间Redis服务器崩溃等异常情况除外)。
  3. DISCARD命令
    • 作用:取消当前事务,清空事务队列,并且放弃执行在MULTI之后放入队列的所有命令。

示例代码(以Python的redis - py库为例)

import redis

# 连接Redis服务器
r = redis.Redis(host='localhost', port = 6379, db = 0)

# 开启事务
pipe = r.pipeline()
pipe.multi()

# 对哈希表进行连续的字段设置操作
hash_key = 'test_hash'
field1 = 'field1'
value1 = 'value1'
field2 = 'field2'
value2 = 'value2'

pipe.hset(hash_key, field1, value1)
pipe.hset(hash_key, field2, value2)

# 执行事务
try:
    pipe.execute()
    print("事务执行成功")
except Exception as e:
    # 取消事务(这里假设异常时取消事务)
    pipe.discard()
    print(f"事务执行失败,原因: {e}")

示例代码(以Redis命令行为例)

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> HSET test_hash field1 value1
QUEUED
127.0.0.1:6379> HSET test_hash field2 value2
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 1
127.0.0.1:6379> # 如果要取消事务
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> HSET test_hash field3 value3
QUEUED
127.0.0.1:6379> DISCARD
OK