关于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 删除失效主键的方法主要有两种:
消极方法(passive way)
在主键被访问时如果发现它已经失效,那么就删除它
积极方法(active way )
周期性地从设置了失效时间的主键中选择一部分失效的主键删除
对于那些从未被查询的key,即便它们已经过期,被动方式也无法清除。因此Redis会周期性地随机测试一些key,已过期的key将会被删掉。Redis每秒会进行10次操作,具体的流程:
- 随机测试 20 个带有timeout信息的key;
- 删除其中已经过期的key;
- 如果超过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.*
网友评论