Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务
- 命令入队
- 执行事务
require 'redis'
$redis = Redis.new
# redis.multi #开始事务
# p redis.set('a-key','a-key named by lvc')
# p redis.sadd('tag',['ruby','rails','redis','mongodb','mysql'])
# p redis.smembers('tag')
# redis.exec
def run
$redis.multi #开始事务
sleep(3)
puts "go--go---go---go----"
redis_string #事务入队
redis_hash
redis_list
redis_set
redis_sorted_set
$redis.exec #执行事务
puts 'end-end--end------'
end
def redis_string
puts "redis_string start"
p $redis.set('string',"this is a string")
end
def redis_hash
puts "redis_hash start"
p $redis.hmset('hash',['name','redis','content','redis is a key-value db'])
# p $redis.hgetall('hash')
end
def redis_list
puts "redis list start"
p $redis.lpush('list',['redis','mongodb','mysql'])
end
def redis_set
puts 'redis set start--------------'
p $redis.sadd('set',['redis','mongodb','mysql','set'])
end
def redis_sorted_set
puts 'redis sorted set start'
p $redis.zadd('sort_set',1,'redis')
$redis.zadd('sort_set',2,'mongodb')
$redis.zadd('sort_set',3,'mysql')
$redis.zadd('sort_set',4,'sort_set')
end
run