事务
保证一个事物中的所有命令要么都执行,要么都不执行。
watch命令介绍
watch命令可以监控一个或多个键,一旦其中有一个键被修改或者删除,之后的事务不会执行,一直持续到exec 命令。exec 会取消对所有键的监控,unwatch可以对指定key取消监控
redis> set key 1
ok
redis> watch key
ok
redis> set key 2
ok
redis> multi
ok
redis> set key 3
queued
redis> exec
(nil)
redis> get key
"2"
在执行wathc命令后,事务执行前修改了key的值,之后的事务不会执行。
过期操作
- expire key seconds 设置过期时间, 单位1秒,返回1 设置成功
- pexpire key seconds 单位 1毫秒
- ttl key 查询过期时间 -2:已删除,-1 永久存在
- pttl key 查询过期时间 毫秒
- persist key 清除键的过期时间设置(设置键永久),set 、getset 命令为键赋值也会清除过期
访问频率限制之一
访问频率限制之二
缓存
限制redis最大可用内存大小 maxmemory参数,当超出依据maxmemory-policy参数指定的策略来删除不需要的键知道内存小于指定内存。
LRU(least Rencently Used): 最近最少使用
排序
sort key [alpha] [desc] [limit offset, count],desc表示从大到小,默认从小到大
sort命令可以对列表、集合、有序集合进行排序。
有序集合排序只针对元素自身的值进行排序。
除了排列数字,也可以使用alpah参数实现按照字典顺序排列非数字元素。
by:
get:
store:
性能优化:
消息通知
brpop/blpop:
每秒都会调用一次,想要实现当新任务加入时候再进行弹出,使用brpop,brpop 与rpop相似,区别在于当列表中没有元素时,brpop会阻塞连接,知道有新元素加入。
该命令可以同时检测多个键,如果多个键都有元素,则按照从左到右顺序取第一个键中的一个元素。
确认邮件和发送通知可以如下形式:
loop
$task = brpop queue:confirmation.email,queue:notification.email,0
execute($task[1])
无论通知邮件队列有多少个,都会优先执行确认邮件。
“发布/订阅 模式”:
- publish channel message 发布者发布消息
- subscribe channel [channel …] 订阅频道
- unsubscribe [channel] [channnel …] 取消频道,如果不指定频道 就会取消订阅所有频道
- psubscribe channel.?* 订阅指定的规则名称频道, 规则支持glob风格通配符格式,该命令会重复订阅一个相同频道
管道:
内部编码:
type表示键值的数据类型,
encoding字段表示redis键值的内部编码方式,可以用如下方式查询:
上述内部编码方式详细介绍:《redis入门指南 第二版》4.6.2 介绍很详细,通俗易懂,可以重复翻阅