1、概述
Redis中的事务是一组命令的集合。事务同命令一样,是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。
熟悉数据库的猿们,都知道事务具有的特性,概括起来就是ACID(原子性,一致性,隔离性,持久性)
2、如何使用Redis的事务
redis>MULTI
OK
redis>SADD “user:1:following” 2
QUEUED
redis>EXEC
1)(integer) 1
2)(integer) 2
如果在发送EXEC命令前客户端断线了,则Redis会清空事务队列。
3、错误处理
(1)语法错误
只要有一个命令语法错误,执行EXEC命令后,Redis会直接返回错误信息
(2)运行错误
如果事务里的一条命令出现了运行错误,事务里其他的命令依然会继续执行(包括出错命令之后的命令)
注意:Redis没有提供事务回滚的功能,需要程序员在程序里自行处理数据库状态的回滚。
4、WATCH命令
WATCH命令监控一个或者多个键,一旦其中有一个键被修改(删除),之后的事务就不会执行,监控一直持续到EXEC命令。
注意:WATCH命令的作用只是当被监控的键值被修改后阻止之后一个事务的执行,而不能保证其他客户端不修改这一键值,所以我们要在EXEC失败后重新执行整个函数。
5、生存时间
EXPIRE命令设置一个键的生存时间,到时间后,Redis会自动删除
EXPIRE key seconds
TTL key 查看一个键还要多久被删除
PERSIST key 取消一个键的生存时间设置。
使用SET或GETSET命令为键赋值,也会清除键的生存时间。
PEXPIRE 与 EXPIRE的区别,时间是毫秒数
6、作为缓存使用
配置文件中maxmemory-policy
7、排序
虽然集合类型提供了大量的操作,但是需要用到排序的时候,使用有序集合类型。
除了使用集合类型外,还可以使用SORT命令
SORT可以对列表类型,集合类型,有序集合类型键进行排序
SORT key 排列数值型
SORT key ALPHA 排列非数值型
SORT key DESC LIMIT offset count
排序参考键
如果几个元素的参考键值相同,则SORT会再比较元素本身的值来排序。
当某个元素的参考键不存在时,会默认参考键的值为0.
GET#会返回元素本身的值
消息通知
利用Redis实现任务队列
LPUSH和BRPOP
BRPOP与RPOP相似,只是当列表中没有元素时,会阻塞连接
BRPOP key1 key2 ….可以检测多个键,如果所有键都没有元素,则阻塞,否则按照从左到右取第一个键的第一个元素
利用Redis实现发布/订阅模式
发布/订阅模式的含义:订阅者可以订阅一个或者若干个频道,而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都能收到消息
PUBLISH channel1 hello
SUBSCRIBE channel1
PSUBSCRIBE channel1.?* 可以订阅 channel1.1 channel1.2等符合匹配的
管道
客户端和Redis服务器是通过TCP连接的,每一次命令请求或者结果回送都是经过网络传输的。
Redis的底层通信协议对管道提供了支持,通过管道可以一次性发送多条命令,并在执行完后一次性将结果送回。
管道通过减少客户端与Redis的通信次数实现降低往返时延累计值。
节省空间
OBJECT ENCODING key 查看一个键的编码