一、基本命令
1、基础命令
开启redis客户端: redis-cli
2、
二、发布订阅
-
开启本地 Redis 服务,开启两个 redis-cli 客户端。
-
在第一个 redis-cli 客户端输入 SUBSCRIBE runoobChat,意思是订阅
runoobChat频道。 -
在第二个 redis-cli 客户端输入 PUBLISH runoobChat "Redis PUBLISH test" 往 runoobChat 频道发送消息,这个时候在第一个 redis-cli 客户端就会看到由第二个 redis-cli 客户端发送的测试消息。

Redis 发布订阅命令
下表列出了 redis 发布订阅常用命令:
| 序号 | 命令及描述 |
|---|---|
| 1 | PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。 |
| 2 | PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。 |
| 3 | PUBLISH channel message 将信息发送到指定的频道。 |
| 4 | PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。 |
| 5 | SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。 |
| 6 | UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。 |
三、事务
Redis 事务
Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:
- 批量操作在发送 EXEC 命令前被放入队列缓存。
- 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
- 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
实例
以下是一个事务的例子, 它先以 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) 3
4) 1) "Mastering Series"
2) "C++"
3) "Programming"
注意:
单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。
事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。
Redis 事务命令
下表列出了 redis 事务的相关命令:
| 序号 | 命令及描述 |
|---|---|
| 1 | DISCARD 取消事务,放弃执行事务块内的所有命令。 |
| 2 | EXEC 执行所有事务块内的命令。 |
| 3 | MULTI 标记一个事务块的开始。 |
| 4 | UNWATCH 取消 WATCH 命令对所有 key 的监视。 |
| 5 | WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。 |
四、Redis 连接
Redis 连接命令主要是用于连接 redis 服务。
实例
以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:
redis 127.0.0.1:6379> AUTH "password" OK redis 127.0.0.1:6379> PING PONG
Redis 连接命令
下表列出了 redis 连接的基本命令:
| 序号 | 命令及描述 |
|---|---|
| 1 | AUTH password 验证密码是否正确 |
| 2 | ECHO message 打印字符串 |
| 3 | PING 查看服务是否运行 |
| 4 | QUIT 关闭当前连接 |
| 5 | SELECT index 切换到指定的数据库 |
五、Redis 服务器命令
下表列出了 redis 服务器的相关命令:
| 序号 | 命令及描述 |
|---|---|
| 1 | BGREWRITEAOF 异步执行一个 AOF(AppendOnly File) 文件重写操作 |
| 2 | BGSAVE 在后台异步保存当前数据库的数据到磁盘 |
| 3 | CLIENT KILL [ip:port] [ID client-id] 关闭客户端连接 |
| 4 | CLIENT LIST 获取连接到服务器的客户端连接列表 |
| 5 | CLIENT GETNAME 获取连接的名称 |
| 6 | CLIENT PAUSE timeout 在指定时间内终止运行来自客户端的命令 |
| 7 | CLIENT SETNAME connection-name 设置当前连接的名称 |
| 8 | CLUSTER SLOTS 获取集群节点的映射数组 |
| 9 | COMMAND 获取 Redis 命令详情数组 |
| 10 | COMMAND COUNT 获取 Redis 命令总数 |
| 11 | COMMAND GETKEYS 获取给定命令的所有键 |
| 12 | TIME 返回当前服务器时间 |
| 13 | COMMAND INFO command-name [command-name ...] 获取指定 Redis 命令描述的数组 |
| 14 | CONFIG GET parameter 获取指定配置参数的值 |
| 15 | CONFIG REWRITE 对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写 |
| 16 | CONFIG SET parameter value 修改 redis 配置参数,无需重启 |
| 17 | CONFIG RESETSTAT 重置 INFO 命令中的某些统计数据 |
| 18 | DBSIZE 返回当前数据库的 key 的数量 |
| 19 | DEBUG OBJECT key 获取 key 的调试信息 |
| 20 | DEBUG SEGFAULT 让 Redis 服务崩溃 |
| 21 | FLUSHALL 删除所有数据库的所有key |
| 22 | FLUSHDB 删除当前数据库的所有key |
| 23 | INFO [section] 获取 Redis 服务器的各种信息和统计数值 |
| 24 | LASTSAVE 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示 |
| 25 | MONITOR 实时打印出 Redis 服务器接收到的命令,调试用 |
| 26 | ROLE 返回主从实例所属的角色 |
| 27 | SAVE 同步保存数据到硬盘 |
| 28 | SHUTDOWN [NOSAVE] [SAVE] 异步保存数据到硬盘,并关闭服务器 |
| 29 | SLAVEOF host port 将当前服务器转变为指定服务器的从属服务器(slave server) |
| 30 | SLOWLOG subcommand [argument] 管理 redis 的慢日志 |
| 31 | SYNC 用于复制功能(replication)的内部命令 |
六、Redis Stream
Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。
七、Redis 性能测试
实例
以下实例我们使用了多个参数来测试 redis 性能:
$ redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q SET: 146198.83 requests per second LPUSH: 145560.41 requests per second
以上实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。
redis 性能测试工具可选参数如下所示:
| 序号 | 选项 | 描述 | 默认值 |
|---|---|---|---|
| 1 | -h | 指定服务器主机名 | 127.0.0.1 |
| 2 | -p | 指定服务器端口 | 6379 |
| 3 | -s | 指定服务器 socket | |
| 4 | -c | 指定并发连接数 | 50 |
| 5 | -n | 指定请求数 | 10000 |
| 6 | -d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
| 7 | -k | 1=keep alive 0=reconnect | 1 |
| 8 | -r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
| 9 | -P | 通过管道传输 <numreq> 请求 | 1 |
| 10 | -q | 强制退出 redis。仅显示 query/sec 值 | |
| 11 | --csv | 以 CSV 格式输出 | |
| 12 | -l | 生成循环,永久执行测试 | |
| 13 | -t | 仅运行以逗号分隔的测试命令列表。 | |
| 14 | -I | Idle 模式。仅打开 N 个 idle 连接并等待。 |
八、Redis 客户端连接
Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:
- 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
- 然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
- 然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送
最大连接数
在 Redis2.4 中,最大连接数是被直接硬编码在代码里面的,而在2.6版本中这个值变成可配置的。
maxclients 的默认值是 10000,你也可以在 redis.conf 中对这个值进行修改。
config get maxclients 1) "maxclients" 2) "10000"
实例
以下实例我们在服务启动时设置最大连接数为 100000:
redis-server --maxclients 100000
客户端命令
| S.N. | 命令 | 描述 |
|---|---|---|
| 1 | CLIENT LIST | 返回连接到 redis 服务的客户端列表 |
| 2 | CLIENT SETNAME | 设置当前连接的名称 |
| 3 | CLIENT GETNAME | 获取通过 CLIENT SETNAME 命令设置的服务名称 |
| 4 | CLIENT PAUSE | 挂起客户端连接,指定挂起的时间以毫秒计 |
| 5 | CLIENT KILL | 关闭客户端连接 |
九、连接到 redis 服务
实例
import redis.clients.jedis.Jedis; public class RedisJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost"); // 如果 Redis 服务设置来密码,需要下面这行,没有就不需要 // jedis.auth("123456"); System.out.println("连接成功"); //查看服务是否运行 System.out.println("服务正在运行: "+jedis.ping()); } }
编译以上 Java 程序,确保驱动包的路径是正确的。
连接成功 服务正在运行: PONG
Redis Java String(字符串) 实例
实例
import redis.clients.jedis.Jedis; public class RedisStringJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost"); System.out.println("连接成功"); //设置 redis 字符串数据 jedis.set("runoobkey", "www.runoob.com"); // 获取存储的数据并输出 System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey")); } }
编译以上程序。
连接成功 redis 存储的字符串为: www.runoob.com
Redis Java List(列表) 实例
实例
import java.util.List; import redis.clients.jedis.Jedis; public class RedisListJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost"); System.out.println("连接成功"); //存储数据到列表中 jedis.lpush("site-list", "Runoob"); jedis.lpush("site-list", "Google"); jedis.lpush("site-list", "Taobao"); // 获取存储的数据并输出 List<String> list = jedis.lrange("site-list", 0 ,2); for(int i=0; i<list.size(); i++) { System.out.println("列表项为: "+list.get(i)); } } }
编译以上程序。
连接成功 列表项为: Taobao 列表项为: Google 列表项为: Runoob
Redis Java Keys 实例
实例
import java.util.Iterator; import java.util.Set; import redis.clients.jedis.Jedis; public class RedisKeyJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhost"); System.out.println("连接成功"); // 获取数据并输出 Set<String> keys = jedis.keys("*"); Iterator<String> it=keys.iterator() ; while(it.hasNext()){ String key = it.next(); System.out.println(key); } } }
编译以上程序。
连接成功 runoobkey site-list
本文详细介绍了Redis的基础命令、发布订阅机制、事务操作、连接管理和服务器相关命令。通过实例展示了如何使用Redis进行数据操作、事务处理以及连接管理,还涵盖了Redis的性能测试和客户端连接。同时,提到了Redis5.0新增的Stream数据结构,用于实现消息队列功能,提供消息持久化和主备复制。
5497

被折叠的 条评论
为什么被折叠?



