本篇基于redis 4.0.11版本,学习发布订阅、事务、脚本、连接的相关命令。
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
序号 | 命令 | 描述 | 事例 | 结果 |
1 | SUBSCRIBE channel [channel ...] | 订阅给定的一个或多个频道的信息。 | 创建了订阅频道名为redisChat:SUBSCRIBE redisChat | Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redisChat" 3) (integer) 1 |
2 | PUBLISH channel message | 将信息发送到指定的频道。 | 将haha发布到mychannel渠道:publish mychannel haha | 本窗口:"2" --返回订阅数量 订阅窗口:1) "message" 2) "mychannel" 3) "haha" |
3 | PSUBSCRIBE pattern [pattern ...] | 订阅一个或多个符合给定模式的频道。 | 订阅my开头模式的频道:PSUBSCRIBE my* | Reading messages... (press Ctrl-C to quit) 1) "psubscribe" # 返回值的类型:显示订阅成功 2) "my*" # 订阅的模式 3) (integer) 1 # 目前已订阅的模式的数量 ---------------------- 1) "pmessage" # 返回值的类型:信息 2) "my*" # 信息匹配的模式 3) "mychannel" # 信息本身的目标频道 4) "haha" # 信息的内容 |
4 | PUBSUB subcommand [argument [argument ...]] | 查看订阅与发布系统状态。 | 打印所有活跃频道:PUBSUB CHANNELS 订阅者数量:PUBSUB NUMSUB mychannel | 1) "mychannel" 2) "redisChat" --------------- 1) "mychannel" 2) (integer) 1 |
5 | UNSUBSCRIBE [channel [channel ...]] | 指退订给定的频道。 | ||
6 | PUNSUBSCRIBE [pattern [pattern ...]] | 退订所有给定模式的频道。 |
Redis 事务可以一次执行多个命令,收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行,在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
序号 | 命令 | 描述 | 事例 | 结果 |
1 | DISCARD | 取消事务,放弃执行事务块内的所有命令。 | 127.0.0.1:6379> MULTI OK 127.0.0.1:6379> SET greeting "hello" QUEUED 127.0.0.1:6379> DISCARD OK | |
2 | MULTI | 标记一个事务块的开始。 | 127.0.0.1:6379> MULTI OK 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days" QUEUED 127.0.0.1:6379> GET book-name QUEUED 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series" QUEUED 127.0.0.1:6379> SMEMBERS tag QUEUED 127.0.0.1:6379> EXEC | 1) OK 2) "Mastering C++ in 21 days" 3) (integer) 3 4) 1) "Programming" 2) "C++" 3) "Mastering Series" |
3 | EXEC | 执行所有事务块内的命令。 | ||
4 | WATCH key [key ...] | 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 | WATCH lock lock_times | ok |
5 | UNWATCH | 取消 WATCH 命令对所有 key 的监视。 | UNWATCH | ok |
Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL。
序号 | 命令 | 描述 | 事例 | 结果 |
1 | EVAL script numkeys key [key ...] arg [arg ...] | 执行 Lua 脚本 | eval "return {KEYS[1],KEYS[2],KEYS[3],ARGV[1]}" 3 key1 key2 first second | 1) "key1" 2) "key2" 3) "first" 4) "second" |
2 | EVALSHA sha1 numkeys key [key ...] arg [arg ...] | 执行 Lua 脚本 | ||
3 | SCRIPT EXISTS script [script ...] | 查看指定的脚本是否已经被保存在缓存当中 | SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a | 1) (integer) 1 |
4 | SCRIPT FLUSH | 从脚本缓存中移除所有脚本 | ||
5 | SCRIPT KILL | 杀死当前正在运行的 Lua 脚本 | ||
6 | SCRIPT LOAD script | 将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本 | SCRIPT LOAD "return 'hello moto'" | "232fd51614574cf0867 b83d384a5e898cfd24e5a" |
连接 redis 服务命令:
redis-cli -h host -p port -a password
host:远程redis服务器host
port:远程redis服务端口
password:远程redis服务密码(无密码的的话就不需要-a参数了)
如:redis-cli -h 192.168.10.18 -p 26380
序号 | 命令 | 描述 | 事例 | 结果 |
1 | AUTH password | 验证密码是否正确 | ||
2 | ECHO message | 打印字符串 | ECHO HAHA | "HAHA" |
3 | PING | 查看服务是否运行 | PING | PONG # 客户端和服务器连接正常 |
4 | QUIT | 关闭当前连接 | ||
5 | SELECT index | 切换到指定的数据库 | SELECT 2 | OK |
6 | CONFIG get requirepass | 是否设置了密码验证 | 1) "requirepass" 2) "" # 密码 | |
7 | CONFIG set requirepass "summer" | 设置密码 | OK | |
8 | config get maxclients | 查询最大连接数 | 1) "maxclients" 2) "10000" | |
9 | client list | 连接到 redis 服务的客户端列表 | id=1748 addr=127.0.0.1:56980 fd=8 name= age=30 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client |
数据备份与恢复:
序号 | 命令 | 描述 | 结果 |
1 | save | 该命令将在 redis 安装目录中创建dump.rdb文件 | OK |
2 | config get dir | 输出的 redis 安装目录 | 1) "dir" 2) "/tmp" |
3 | BGSAVE | 该命令在后台执行 | Background saving started |
将redis中表数据导出成文件:
./redis-cli -h IP地址 -p 端口号 -a 密码 -n 数据库默认0 hgetall 哈希表 key名 > 文件名
例如:./redis-cli -h 192.168.10.10 -p 16379 -a 123456 -n 0 hgetall SYS.TABLE > redis_bak.txt
上一篇:【Redis数据库】命令学习笔记——列表(list)+集合(set)+有序集合(sorted set)(17+15+20个超全字典版)