资讯专栏INFORMATION COLUMN

Redis 发布与订阅 和 键的过期时间

wawor4827 / 1674人阅读

摘要:发布和订阅每当有消息被发送至给定频道时频道的所有订阅者都会收到消息订阅订阅给定的一个或多个频道的信息返回接收到的信息请参见下面的代码说明订阅和两个频道行是执行之后的反馈信息第行才是接收到的第一条信息第行是第二条返回值的类型显示订阅成

发布和订阅

每当有消息被发送至给定频道时, 频道的所有订阅者都会收到消息.

订阅
SUBSCRIBE channel [channel …]

订阅给定的一个或多个频道的信息.

返回接收到的信息(请参见下面的代码说明).

# 订阅 msg 和 chat_room 两个频道

# 1 - 6 行是执行 subscribe 之后的反馈信息
# 第 7 - 9 行才是接收到的第一条信息
# 第 10 - 12 行是第二条

redis> subscribe msg chat_room
Reading messages... (press Ctrl-C to quit)
1) "subscribe"       # 返回值的类型:显示订阅成功
2) "msg"             # 订阅的频道名字
3) (integer) 1       # 目前已订阅的频道数量

1) "subscribe"
2) "chat_room"
3) (integer) 2

1) "message"         # 返回值的类型:信息
2) "msg"             # 来源(从那个频道发送过来)
3) "hello moto"      # 信息内容

1) "message"
2) "chat_room"
3) "testing...haha"

UNSUBSCRIBE [channel [channel …]]

指示客户端退订给定的频道.

如果没有频道被指定, 也即是, 一个无参数的 UNSUBSCRIBE 调用被执行, 那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订. 在这种情况下, 命令会返回一个信息, 告知客户端所有被退订的频道.


PSUBSCRIBE pattern [pattern …]

订阅一个或多个符合给定模式的频道.

每个模式以 * 作为匹配符, 比如 it* 匹配所有以 it 开头的频道( it.news it.blog it.tweets 等等), news.* 匹配所有以 news. 开头的频道( news.it news.global.today 等等), 诸如此类.

返回接收到的信息(请参见下面的代码说明)

# 订阅 news.* 和 tweet.* 两个模式

# 第 1 - 6 行是执行 psubscribe 之后的反馈信息
# 第 7 - 10 才是接收到的第一条信息
# 第 11 - 14 是第二条
# 以此类推。。。

redis> psubscribe news.* tweet.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"                  # 返回值的类型:显示订阅成功
2) "news.*"                      # 订阅的模式
3) (integer) 1                   # 目前已订阅的模式的数量

1) "psubscribe"
2) "tweet.*"
3) (integer) 2

1) "pmessage"                    # 返回值的类型:信息
2) "news.*"                      # 信息匹配的模式
3) "news.it"                     # 信息本身的目标频道
4) "Google buy Motorola"         # 信息的内容

1) "pmessage"
2) "tweet.*"
3) "tweet.huangz"
4) "hello"

1) "pmessage"
2) "tweet.*"
3) "tweet.joe"
4) "@huangz morning"

1) "pmessage"
2) "news.*"
3) "news.life"
4) "An apple a day, keep doctors away"

PUNSUBSCRIBE [pattern [pattern …]]

指示客户端退订所有给定模式.

如果没有模式被指定, 也即是, 一个无参数的 PUNSUBSCRIBE 调用被执行, 那么客户端使用 PSUBSCRIBE pattern [pattern …] 命令订阅的所有模式都会被退订. 在这种情况下, 命令会返回一个信息, 告知客户端所有被退订的模式.

发布
PUBLISH channel message

将信息 message 发送到指定的频道 channel.

返回接收到信息 message 的订阅者数量.

# 对没有订阅者的频道发送信息

redis> publish bad_channel "can any body hear me?"
(integer) 0


# 向有一个订阅者的频道发送信息

redis> publish msg "good morning"
(integer) 1


# 向有多个订阅者的频道发送信息

redis> publish chat_room "hello~ everyone"
(integer) 3
键的过期时间

在使用 Redis 存储数据的时候, 有些数据可能在某个时间点之后就不再有用了, 用户可以使用 DEL 命令显示的删除这些无用元素, 也可以通过 Redis 的过期时间特性来让键在给定的时限之后自动删除.

当我们说一个键"带有生存时间" 或 "会在特定时间之后过期" 时, 我们指的是 Redis 会在这个键的过期时间达到时自动删除该键.

EXPIRE key seconds

为给定 key 设置生存时间, 当 key 过期时(生存时间为 0 ), 它会被自动删除.

在 Redis 中, 带有生存时间的 key 被称为『易失的』(volatile).

生存时间可以通过使用 DEL 命令来删除整个 key 来移除, 或者被 SETGETSET 命令覆写(overwrite), 这意味着, 如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话, 那么生存时间不会被改变.

比如说, 对一个 key 执行 INCR 命令, 对一个列表进行 LPUSH 命令, 或者对一个哈希表执行 HSET 命令, 这类操作都不会修改 key 本身的生存时间.

另一方面, 如果使用 RENAME 对一个 key 进行改名, 那么改名后的 key 的生存时间和改名前一样.

RENAME 命令的另一种可能是, 尝试将一个带生存时间的 key 改名成另一个带生存时间的 another_key, 这时旧的 another_key (以及它的生存时间)会被删除, 然后旧的 key 会改名为 another_key, 因此, 新的 another_key 的生存时间也和原本的 key 一样.

使用 PERSIST 命令可以在不删除 key 的情况下, 移除 key 的生存时间, 让 key 重新成为一个『持久的』(persistent) key.

更新生存时间

可以对一个已经带有生存时间的 key 执行 EXPIRE 命令, 新指定的生存时间会取代旧的生存时间.

过期时间的精确度

设置成功返回 1. 当 key 不存在或者不能为 key 设置生存时间时, 返回 0.


TTL key

以秒为单位, 返回给定 key 的剩余生存时间(TTL, time to live).

当 key 不存在时, 返回 -2. 当 key 存在但没有设置剩余生存时间时, 返回 -1. 否则, 以秒为单位, 返回 key 的剩余生存时间.


PEXPIRE key milliseconds

这个命令和 EXPIRE 命令的作用类似, 但是它以毫秒为单位设置 key 的生存时间, 而不像 EXPIRE 命令那样, 以秒为单位.

设置成功, 返回 1 key 不存在或设置失败, 返回 0.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37293.html

相关文章

  • redis常用命令

    摘要:常用命令字符串在里面,字符串可以存储以下中类型的值字符串。常用的列表命令将一个或多个值推入列表的右端。默认使用的聚集函数是,可以根据的参数修改聚集函数。对于,用户可以将集合作为输入传给和,命令会将集合看作是成员分值全为的有序集合来处理。 3.Redis常用命令 3.1 字符串 在redis里面,字符串可以存储以下3中类型的值 字符串。 整数。 浮点数。 用户可以对存储着整数或者浮...

    zhaochunqi 评论0 收藏0
  • Python--Redis实战:第三章:Redis命令:第七节:其他命令

    摘要:上一篇文章实战第三章命令第六节发布与订阅下一篇文章实战第四章数据安全与性能保障第节持久化选项到目前为止,本章介绍了提供的种结构以及的发布与订阅模式。 上一篇文章:Python--Redis实战:第三章:Redis命令:第六节:发布与订阅下一篇文章:Python--Redis实战:第四章:数据安全与性能保障:第1节:持久化选项 到目前为止,本章介绍了Redis提供的5种结构以及Redi...

    masturbator 评论0 收藏0
  • Python--Redis实战:第三章:Redis命令:第七节:其他命令

    摘要:上一篇文章实战第三章命令第六节发布与订阅下一篇文章实战第四章数据安全与性能保障第节持久化选项到目前为止,本章介绍了提供的种结构以及的发布与订阅模式。 上一篇文章:Python--Redis实战:第三章:Redis命令:第六节:发布与订阅下一篇文章:Python--Redis实战:第四章:数据安全与性能保障:第1节:持久化选项 到目前为止,本章介绍了Redis提供的5种结构以及Redi...

    lastSeries 评论0 收藏0
  • Redis

    摘要:安全性所只能由被持有的客户端删除。如果不存在,则创建并赋值时间复杂度返回值设置成功返回,设置失败,返回设置的生存时间,当过期时生存时间为,会被自动删除,释放锁。而等专门的消息队列有应答机制更实用于消息队列。 一、从海量数据里查询某一固定前缀的key KEYS pattern 例如:KEYS k1* 查找所有符合给定模式pattern的key。 KEYS指令一次性返回所有匹配的...

    Eidesen 评论0 收藏0
  • RedisRedis常用命令

    摘要:不建议使用多个数据库用于清除数据库,只清除当前数据库,清除所有数据库。 IP:192.168.225.128环境:centos7 一、全局命令1、查询键keys * 查询所有的键,会遍历所有的键值,复杂度O(n) 2、键总数dbsize 查询键总数,直接获取redis内置的键总数变量,复杂度O(1) 3、检查键是否存在exists key 存在返回1,不存在返回0 4、删除键O(k)d...

    impig33 评论0 收藏0

发表评论

0条评论

wawor4827

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<