《玩转Redis》系列文章主要讲述Redis的基础及中高级应用,文章基于Redis5.0.4+。Redis的连接往往是由程序完成,多数程序员并不关心,但掌握连接命令能提升自己的综合水平,真正了解整个Redis的使用过程。
1、连接命令概述
2、各命令详解
2.1、AUTH认证命令
2.1.1、AUTH命令功能
- AUTH命令用于密码验证,Redis的密码明文配置在配置文件redis.conf(requirepass yourRedisPassword)中;
- 由于Redis高性能,建议使用复杂密码避免被爆破;
- 建议修改默认端口6379,避免被爆破;
# 查询密码
config get requirepass
# 在线设置密码
config set requirepass abcdefg
# (生产环境应屏蔽config命令)
# rename-command CONFIG ""
2.1.2、示例
# 无密码连接
[guest@xxx redis]$ ./redis-cli -h 127.0.0.1 -p 6378
# 输入密码验证
127.0.0.1:6378> AUTH 123456
(error) ERR invalid password
127.0.0.1:6378> auth pwd123456
OK
2.2、ECHO命令
- ECHO命令将返回参数本身,常用于脚本中;
- 脚本中的ECHO支持引入变量;
PIDFILE=/var/run/redis_${REDISPORT}.pid
echo "$PIDFILE is 123"
2.3、PING命令
- 测试Redis建立的连接是否可用(连接存在被其他线程关闭的情况);
- 测试连接的延迟;
- PING不带参数将返回"PONG",带参数将返回参数本身;
- 如果订阅了channel或pattern,PING第一次返回"PONG",后续返回空字符串。
127.0.0.1:6378> ping
PONG
127.0.0.1:6378> ping "hi @zxiaofan"
"hi @zxiaofan"
2.4、QUIT命令
- 用于关闭连接,成功返回"OK";
- 由于Redis是单线程,故当有命令正在执行操作时,连接时无法被关闭的;
2.5、SELECT命令
- 用于选择Redis数据库;
- Redis共有16个DB,DB索引从0开始,新连接总是使用DB0;
- 不同的DB可以有相同名字的key;
- 需要指定DB的命令:FLUSHDB、SWAPDB、RANDOMKEY;
- DB主要用于拆分属于相同应用的不同key;
- Redis Cluster只能使用DB0,不能使用SELECT命令;
- index范围超出[0,15]时,将提示(error) ERR DB index is out of range;
注意:
Redis没有提供命令查询当前连接所选择的DB,命令CLIENT LIST可展示所有连接选择的DB(db=0);
Redis如何查看当前连接操作的DB:
- 控制台查看:
127.0.0.1:6378> select 1
OK
# 注意在6378后有个“[1]”,这个就表示当前连接操作的DB;
127.0.0.1:6378[1]> select 0
OK
127.0.0.1:6378>
- 三方API(如lettuce、jedis)
# lettuce 中查看DB的API:
/**
* Returns the Redis database number. Databases are only available for Redis Standalone and Redis Master/Slave.
*
* @return
*/
public int getDatabase() {
return database;
}
2.6、SWAPDB命令
2.6.1、SWAPDB命令功能及示例
- 用于交换2个Redis的DB中的数据,交换成功返回"OK";
- 交换DB中的数据,并不是直接切换连接;
- SWAPDB 0 1后,先前访问DB0的连接能立即访问以前DB1中的数据,但实际上连接依旧是DB0;
- index范围超出[0,15]时,将提示(error) ERR DB index is out of range;
- 如果发现Redis中始终没有预期数据,可以先确认DB是否正确;
127.0.0.1:6378> set db0 db0value
OK
127.0.0.1:6378> select 1
OK
127.0.0.1:6378[1]> set db1 db1value
OK
127.0.0.1:6378[1]> get db0
(nil)
127.0.0.1:6378[1]> swapdb 0 1
OK
127.0.0.1:6378[1]> get db0
"db0value"
127.0.0.1:6378[1]> swapdb 0 16
(error) ERR DB index is out of range
2.6.2、SWAPDB命令应用场景
- 修正线上Redis数据:如果线上Redis数据有问题又不能直接处理,可以考虑在新DB中构造正确数据,最后直接切换2个DB的数据(数据量较大慎用);
3、Redis连接命令总结
- 除了SWAPDB命令是4.0.0版本可用,其他命令均是1.0.0版本可用;
- 除PING、ECHO命令外,其他命令执行成功均返回"OK";
- Redis的连接命令在开发中使用较少,但学习了解有备无患;
>人生就像一只储蓄罐,你投入的每一分努力都会在未来的某一天,回馈于你。