1. 事务
redis中的事务是一组命令的集合。redis的事务:multi->queued->exec。
redis保证一个事务中的所有命令要么都执行要么都不执行。如果在发送exec命令前客户端断线了,redis会清空事务队列,事务中的所有命令都不会执行。而一旦客户端发送了exec命令,所有的命令就都会被执行,即使此后客户端断线也没关系,因为redis中已经记录了所有要执行的命令。
如果一个事务中的某个命令执行出错:
1)语法错误:只要有一个命令有语法错误,执行exec命令后redis就会直接返回错误,连语法正确的命令也不会执行。
2)运行错误:redis的事务没有关系数据库事务提供的回滚,为此开发者必须在事务执行出错后自己收拾剩下的摊子(将数据库复原回事务执行前的状态等)。
watch:watch命令可以监控一个或多个键,一旦其中有一个键被修改或删除,之后的事务就不会执行。
执行exec命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用unwatch命令来取消监控。
2. 过期时间
expire key seconds,单位是秒。expire命令返回1表示设置成功,返回0表示键不存在或设置失败。pexpire key millisecond,单位毫秒。
ttl key:返回键的剩余时间(秒)。键不存在时返回-2,若键没有设置过期时间则返回-1。
persist key:取消键的过期时间设置。
为了提高网站的负载能力,常常需要将一些访问频率较高但是对cpu或io资源消耗较大的操作的结果缓存起来,并希望让这些缓存过一段时间自动过期。
当服务器内存有限时,如果大量地使用缓存键且过期时间设置得过长就会导致redis占满内存;另一方面如果为了防止redis占用内存过大而将缓存键的过期时间设置得太短,就可能导致缓存命中率过低并且大量内存闲置。实际开发中为缓存键设置一个合理的过期时间其实很难,为此可以限制redis能够使用的最大内存,并让redis按照一定的规则淘汰不需要的缓存键,这种方式很常用。
maxmemory bytes
maxmemory-policy xxx:当超出了maxmemory时redis会依据maxmemory-policy参数指定的策略来删除不需要的key直到redis占用的内存小于指定内存。
redis支持的淘汰键的规则 | 说明 |
volatile-lru | 使用lru算法删除一个key(只对设置了过期时间的key) |
allkeys-lru | 使用lru算法删除一个key |
volatile-random | 随机删除一个key(只对设置了过期时间的key) |
allkeys-random | 随机删除一个key |
volatile-ttl | 删除过期时间最近的一个key |
noeviction | 不删除key,只返回错误 |