zoukankan      html  css  js  c++  java
  • 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,只返回错误
  • 相关阅读:
    解决mysql-8.0.18 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
    剑指Offer面试题:28.连续子数组的最大和
    Java BigDecimal
    蓝桥杯 分考场 JAVA
    蓝桥杯 合根植物 JAVA
    蓝桥杯 大臣的旅费 JAVA
    蓝桥杯 危险系数 JAVA
    蓝桥杯 幸运数 JAVA
    【转】对memcached使用的总结和使用场景
    【转】Memcached管理与监控工具----MemAdmin
  • 原文地址:https://www.cnblogs.com/i-hard-working/p/12037932.html
Copyright © 2011-2022 走看看