4.1键管理
通过学习五种数据类型的操作命令,可以发现,Redis对每种数据的处理之前,都要先指定该数据的key,然后再指定对该数据进行何种操作。
Redis中的key有点类似于Java中的变量名,起到提纲挈领的作用,对某个数据的处理都是以key作为切入点。所以Redis把key作为单独的处理对象抽象出了一套操作命令。key可以想象成一个指向实际数据的指针,对key的操作会直接影响它所指向的数据的状态。
比如,我们想删除某个数据,就可以通过删除它的key来达到目的:
127.0.0.1:6379> SET name chenlongfei
OK
127.0.0.1:6379> GET name
"chenlongfei"
127.0.0.1:6379> DEL name
(integer) 1
127.0.0.1:6379> GET name
(nil)
想要查看某个数据的类型:
127.0.0.1:6379> SADD direction east west south north
(integer) 4
127.0.0.1:6379> TYPE direction
set
想要更改某个数据的key的名字:
127.0.0.1:6379> RENAME direction direct
OK
127.0.0.1:6379> SMEMBERS direct
1) "north"
2) "west"
3) "south"
4) "east"
命令格式 | 说明 |
DEL key [key ...] | 此命令删除键,如果存在 |
EXISTS key | 此命令检查该键是否存在 |
EXPIRE key seconds | 指定键的过期时间(秒) |
PEXPIRE key milliseconds | 指定键的过期时间(毫秒) |
EXPIREAT key timestamp | 以Unix时间戳格式(秒)指定键的过期时间 |
PEXPIREAT key milliseconds-timestamp | 以Unix时间戳格式(毫秒)指定键的过期时间 |
KEYS pattern | 查找与指定模式匹配的所有键。pattern支持glob-style的通配符格式,如*表示任意一个或多个字符,?表示任意字符,[abc]表示方括号中任意一个字母 |
RENAME key newkey | 更改键的名称 |
RENAMENX key newkey | 重命名键,如果新的键不存在 |
TYPE key | 返回存储在键的数据类型的值 |
RANDOMKEY | 从Redis返回随机键的名字 |
PERSIST key | 如果Key存在过期时间,该命令会将其过期时间消除,使该Key不再有超时,而是可以持久化存储 |
TTL key | (Time To Live)返回该键的剩余存活时间(秒),如果该键不存在或没有超时设置,则返回-1 |
PTTL key | 返回该键的剩余存活时间(毫秒) |
4.2发布订阅管理
发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这点和设计模式中的观察者模式比较相似。
Redis作为一个server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型,Redis将消息类型称为通道(channel)。当发布者通过publish命令向Redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个 channel,也可以向多个channel发送消息。
例如,一个客户端订阅了“CCTV-5”频道的消息:
127.0.0.1:6379> SUBSCRIBE CCTV-5
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "CCTV-5"
3) (integer) 1
另一个客户端在“CCTV-5”发布了两条消息:
127.0.0.1:6379> PUBLISH CCTV-5 "Kobe will say good bye to NBA in 2016.4.4"
(integer) 1
127.0.0.1:6379>PUBLISH CCTV-5 "Cavaliers Cleveland won the championship"
(integer) 1
第一个客户端就会收到这两条消息:
127.0.0.1:6379> SUBSCRIBE CCTV-5
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "CCTV-5"
3) (integer) 1
1)"message"
2)"CCTV-5"
3)"Kobe will say good bye to NBA in 2016.4.4"
1)"message"
2)"CCTV-5"
3) "CavaliersCleveland won the championship"
命令格式 | 说明 |
PUBLISH channel message | 将消息message发布到频道channel |
SUBSCRIBE channel [channel ...] | 订阅一个或多个频道上的消息 |
UNSUBSCRIBE [channel [channel ...]] | 退订频道上的消息 |
PSUBSCRIBE pattern [pattern ...] | (Pattern Subscribe)以模式匹配的方式订阅多个频道 |
PUNSUBSCRIBE [pattern [pattern ...]] | 以模式匹配的方式退订频道消息 |
PUBSUB subcommand [argument [argument ...]] | 查看活动的频道信息。比如“PUBSUB channels”,会列出所有活动的频道名称,所谓“活动的”,是指至少有一个订阅者的频道 |
4.3 连接管理
默认情况下,Redis没有密码要求,意味着无需通过密码验证就可以连接到Redis 服务。
可以通过更改配置文件中的“requirepass”配置项,来设置密码。
winner@winnerdeMacBook-Pro:~$ Redis-cli
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "" --默认没有密码
127.0.0.1:6379> CONFIG set requirepass"chenlongfei" --设置密码
OK
127.0.0.1:6379> QUIT --退出重新连接
winner@winnerdeMacBook-Pro:~$ Redis-cli
127.0.0.1:6379> SET name "clf"
(error) NOAUTH Authentication required. –提示没权限
127.0.0.1:6379> AUTH chenlongfei --验证密码
OK
127.0.0.1:6379> SET name "clf" --之后才能进行操作
OK
127.0.0.1:6379> GET name
"clf"
命令格式 | 说明 |
AUTH password | 验证密码 |
ECHO message | 打印字符串 |
PING | 检验连接状况,正常情况下服务器会返回“PONG”。 |
QUIT | 关闭当前连接 |
SELECT index | 切换到指定的数据库,数据库索引号 index 用数字值指定,以 0 作为起始索引值。默认使用 0 号数据库。 |
4.4 服务器管理
Redis定义了一组与服务器相关的命令,用于查询服务器信息,如当前时间、客户端连接数量,以及修改配置文件、手动触发某些操作等。
命令格式 | 说明 |
INFO | 打印服务器的详细信息 |
CONFIG GETname | 获取配置项name的内容 |
CONFIG SETname value | 将配置项name的值设为value,无需重启 |
BGSAVE | 在后台异步保存当前数据库的数据到磁盘。BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。 |
SAVE | SAVE 命令执行一个同步操作,以RDB文件的方式保存所有数据的快照。很少在生产环境直接使用SAVE 命令,因为它会阻塞所有的客户端的请求,可以使用BGSAVE 命令代替 |
FLUSHALL | 删除所有数据库的所有key |
FLUSHDB | 删除当前数据库的所有key |
SHUTDOWN [NOSAVE] [SAVE] | 停止所有客户端,如果配置了save 策略 则执行一个阻塞的save命令,如果开启了AOF,则刷新aof文件,关闭Redis服务进程(Redis-server)。 如果配置了持久化策略,那么这个命令将能够保证在关闭Redis服务进程的时候数据不会丢失。如果仅仅在客户端执行SAVE 命令,然后 执行QUIT 命令,那么数据的完整性将不会被保证,因为其他客户端可能在执行这两个命令的期间修改数据库的数据。 |