玩转Redis-研发也应该知道的Connection命令

2,173 阅读3分钟

  《玩转Redis》系列文章主要讲述Redis的基础及中高级应用,文章基于Redis5.0.4+。Redis的连接往往是由程序完成,多数程序员并不关心,但掌握连接命令能提升自己的综合水平,真正了解整个Redis的使用过程。

1、连接命令概述

1910RedisConnection.png

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:

  1. 控制台查看:
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> 
  1. 三方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的连接命令在开发中使用较少,但学习了解有备无患;

人生就像一只储蓄罐,你投入的每一分努力都会在未来的某一天,回馈于你。


祝君好运!
Life is all about choices!
将来的你一定会感激现在拼命的自己!
CSDN】【GitHub】【OSCHINA】【掘金】【微信公众号