Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:

开始事务。

命令入队。

执行事务。

实例

以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

redis 127.0.0.1:6379>MULTI
OK
redis 127.0.0.1:6379>SET book-name "Mastering C++ in 21 days"QUEUED
redis 127.0.0.1:6379>GET book-name
QUEUED
redis 127.0.0.1:6379>SADD tag "C++""Programming""Mastering Series"QUEUED
redis 127.0.0.1:6379>SMEMBERS tag
QUEUED
redis 127.0.0.1:6379>EXEC
1)OK
2)"Mastering C++ in 21 days"3)(integer)34)1)"Mastering Series"2)"C++"3)"Programming"

Redis 事务命令

下表列出了 redis 事务的相关命令:

序号命令及描述

1
DISCARD
取消事务,放弃执行事务块内的所有命令。
2
EXEC
执行所有事务块内的命令。
3
MULTI
标记一个事务块的开始。
4
UNWATCH
取消 WATCH 命令对所有 key 的监视。
5
WATCH key [key ...]

监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Redis 脚本

Redis 脚本使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。

语法

Eval 命令的基本语法如下:
redis 127.0.0.1:6379>EVAL script numkeys key [key ...]arg [arg ...]

实例

以下实例演示了 redis 脚本工作过程:

redis 127.0.0.1:6379>EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"2key1 key2 first second
1)"key1"2)"key2"3)"first"4)"second"

Redis 脚本命令

下表列出了 redis 脚本常用命令:

Redis 连接

Redis 连接命令主要是用于连接 redis 服务。

实例

以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:

redis 127.0.0.1:6379>AUTH "password"OK
redis 127.0.0.1:6379>PING
PONG

Redis 连接命令

下表列出了 redis 连接的基本命令:

序号命令及描述

3

PING

查看服务是否运行

4

QUIT

关闭当前连接

Redis 服务器

Redis 服务器命令主要是用于管理 redis 服务。

实例

以下实例演示了如何获取 redis 服务器的统计信息:

redis 127.0.0.1:6379>INFO
# Serverredis_version:2.8.13redis_git_sha1:00000000redis_git_dirty:0redis_build_id:c2238b38b1edb0e2
redis_mode:standalone
os:Linux3.5.0-48-genericx86_64
arch_bits:64multiplexing_api:epoll
gcc_version:4.7.2process_id:3856run_id:0e61abd297771de3fe812a3c21027732ac9f41fetcp_port:6379uptime_in_seconds:11554uptime_in_days:0hz:10lru_clock:16651447config_file:# Clientsconnected_clients:1client-longest_output_list:0client-biggest_input_buf:0blocked_clients:0# Memoryused_memory:589016used_memory_human:575.21Kused_memory_rss:2461696used_memory_peak:667312used_memory_peak_human:651.67Kused_memory_lua:33792mem_fragmentation_ratio:4.18mem_allocator:jemalloc-3.6.0# Persistenceloading:0rdb_changes_since_last_save:3rdb_bgsave_in_progress:0rdb_last_save_time:1409158561rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0rdb_current_bgsave_time_sec:-1aof_enabled:0aof_rewrite_in_progress:0aof_rewrite_scheduled:0aof_last_rewrite_time_sec:-1aof_current_rewrite_time_sec:-1aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Statstotal_connections_received:24total_commands_processed:294instantaneous_ops_per_sec:0rejected_connections:0sync_full:0sync_partial_ok:0sync_partial_err:0expired_keys:0evicted_keys:0keyspace_hits:41keyspace_misses:82pubsub_channels:0pubsub_patterns:0latest_fork_usec:264# Replicationrole:master
connected_slaves:0master_repl_offset:0repl_backlog_active:0repl_backlog_size:1048576repl_backlog_first_byte_offset:0repl_backlog_histlen:0# CPUused_cpu_sys:10.49used_cpu_user:4.96used_cpu_sys_children:0.00used_cpu_user_children:0.01# Keyspacedb0:keys=94,