1.事务
1) 介绍
事务的原理是将属于一个事务的命令发送给redis,再让redis依次执行这些命令
MULTI // 告诉redis将要发送的命令属于同一个事务,先不要执行,只是暂存起来
… // 命令1
… // 命令2
EXEC// 执行事务
2) 错误处理
a.语法错误
b.运行错误
注:redis不支持数据库回滚操作
3) WATCH命令
Watch命令可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到EXEC命令(MULTI命令后可以修改watch监控的键值);执行EXEC命令后会取消所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消监控
2.生存时间
1) Redis中使用EXPIRE命令设置一个键的生存时间,到时间redis会自动删除;使用方法:EXPIRE key seconds // 设置key的生存时间为senconds,qieseconds必须是整数;如果需要精确控制键的生存时间应该使用PEXPIREseconds 单位:毫秒
2) TTL key // 查看key还有多久被删除 PTTL key返回键的毫秒剩余时间
3) PERSIST key // 取消键的生存时间的设置(将键恢复成永久的);使用SET或者GETSET命令为键赋值也会同时清除键的生存时间
3.排序
1) Sort排序
a.可以完成对列表类型、集合类型、有序集合类型的键进行排序
b.可以通过ALPHA参数实现按照字典顺序排列非数字元素
c.可以通过DESC参数实现将元素按照从小到达的顺序排序
d.可以通过LIMIT参数来返回指定范围的结果
Eg:SORT list DESC LIMIT 1 2
e.BY参数
BY参考键,可以是字符串类型键或者是散列类型键的某个字段(键名->字段名)
Eg:
SORTtag:java:posts BY post:* ->time DESC// sort命令读取散列的time字段,并排序
f.GET参数
使SORT命令的返回结果不再是元素自身的值,而是GET参数中指定的键值;可以有多个GET参数;GET # 返回ID
G.STORE参数
保存排序结果;常用来结合EXPIRE命令缓存排序结果
注:时间复杂度O(n+mlogm) // n元素总数;m要返回的元素个数
尽可能减少待排序键中元素的数据(使n尽可能小)
使用LIMIT参数只获取需要的数据(使m尽可能小)
如果要排序的数据量较大,尽可能使用STORE参数将结果缓存
4.消息通知
应用场景:博客邮件订阅、RSS订阅
1) 任务队列
生产者,消费者问题
2) Redis实现任务队列
BRPOP keytimeout // BRPOP 与RPOP命令相似,区别是当列表中没有元素时BRPOP命令会一直阻塞连接,直到新元素加入
3) 优先级队列
BRPOP命令可以同时接受多个键, BLPOP key [key … ] timeout // 同时检测多个键,如果所有键都没有元素则阻塞,如果其中有一个键有元素,则会从该键中弹出元素
4) “发布/订阅”模式
发布者发布消息的命令:PUBLISH chanel message // 发出去的消息不会被持久化
SUBSCRIBEchannel [channel …] // 订阅频道
5)按照规则订阅
PSUBSCRIBE支持glob风格通配符格式,可以重复订阅一个频道
5.管道
当一组命令中每条命令都不依赖之前命令的执行结果就可以将这组命令一起通过管道发出,管道通过减少客户端与Redis的通信次数来实现降低往返时延