redis事务和过期时间

Posted 横看成岭侧成峰-28

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis事务和过期时间相关的知识,希望对你有一定的参考价值。

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,只返回错误

以上是关于redis事务和过期时间的主要内容,如果未能解决你的问题,请参考以下文章

Redis 小白指南- 事务Watch 命令过期消息通知管道优化内存空间

Redis 小白指南- 事务过期消息通知管道和优化内存空间

RedisRedis经典9问—持久化/过期策略/缓存穿透/数据结构/事务/淘汰策略/应用场景/分布式锁

Redis过期删除策略和内存淘汰策略

redis设置过期时间等

Redis 过期策略 和 回收策略