(3)redis的过期时间和发布订阅

2019-01-01  本文已影响0人  Mrsunup

关于redis的命令参考:http://redisdoc.com/

1.redis的key的过期

1.1过期时间设置

在Redis中提供了Expire命令设置一个键的过期时间,到期以后Redis会自动删除它。这个在我们实际使用过程中用得非常多。
EXPIRE命令的使用方法为 :

 EXPIRE key seconds

其中seconds 参数表示键的过期时间,单位为秒
EXPIRE 返回值为1表示设置成功,0表示设置失败或者键不存在

如果向知道一个键还有多久时间被删除,可以使用TTL

TTL key

当键不存在时,TTL命令会返回
而对于没有给指定键设置过期时间的,通过TTL命令会返回-1

如果向取消键的过期时间设置(使该键恢复成为永久的),可以使用PERSIST命令,如果该命令执行成功或者成功,清除了过期时间,则返回1 。 否则返回0(键不存在或者本身就是永久的)

EXPIRE命令的seconds命令必须是整数,所以最小单位是1秒,如果向要更精确的控制键的过期时间可以使用,PEXPIRE命令,当然实际过程中用秒的单位就够了。 PEXPIRE命令的单位是毫秒。
PEXPIRE key 1000与EXPIRE key 1相等;对应的PTTL以毫秒单位获取键的剩余有效时间

PEXPIRE key milliseconds

还有一个针对字符串独有的过期时间设置

SETEX key seconds value  

将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。

PSETEX key milliseconds value  

这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key的生存时间

1.2过期删除的原理

Redis 中的主键失效是如何实现的,即失效的主键是如何删除的?实际上,Redis 删除失效主键的方法主要有两种:

在主键被访问时如果发现它已经失效,那么就删除它

周期性地从设置了失效时间的主键中选择一部分失效的主键删除

对于那些从未被查询的key,即便它们已经过期,被动方式也无法清除。因此Redis会周期性地随机测试一些key,已过期的key将会被删掉。Redis每秒会进行10次操作,具体的流程:

  1. 随机测试 20 个带有timeout信息的key;
  2. 删除其中已经过期的key;
  3. 如果超过25%的key被删除,则重复执行步骤1;

这是一个简单的概率算法(trivial probabilistic algorithm),基于假设我们随机抽取的key代表了全部的key空间

2.Redis发布订阅

Redis提供了发布订阅功能,可以用于消息的传输,Redis提供了一组命令可以让开发者实现“发布/订阅”模式(publish/subscribe) . 该模式同样可以实现进程间的消息传递,它的实现原理是
发布/订阅模式包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或多个频道,而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到该消息

发布者发布消息的命令是PUBLISH, 用法是

PUBLISH channel message

比如向channel.1发一条消息:hello

PUBLISH channel.1 “hello"

这样就实现了消息的发送,该命令的返回值表示接收到这条消息的订阅者数量。因为在执行这条命令的时候还没有订阅者订阅该频道,所以返回为0. 另外值得注意的是消息发送出去不会持久化如果发送之前没有订阅者,那么后续再有订阅者订阅该频道,之前的消息就收不到了

订阅者订阅消息的命令是:

SUBSCRIBE channel [channel ..]

该命令同时可以订阅多个频道,比如订阅channel.1的频道。 SUBSCRIBE channel
执行SUBSCRIBE命令后客户端会进入订阅状态

还有另外一种订阅模式

PSUBSCRIBE pattern [pattern ...]

订阅一个或多个符合给定模式的频道。
比如订阅频道符合正则channel.* 的所有频道: PSUBSCRIBE channel.*

上一篇 下一篇

猜你喜欢

热点阅读