zoukankan      html  css  js  c++  java
  • Redis之过期时间

    1.命令介绍

    expire key seconds    设置key的有效时间,单位为秒
    expire命令返回1表示设置成功,返回0表示键不存在或设置失败。

    ttl key
    ttl命令返回值是键的剩余时间(单位是秒)。当键不存在时,ttl命令会返回-2。没有为键设置过期时间(即永久存在,这是建立一个键后的默认情况)返回-1。

    persist key
    取消键的过期时间设置,如果过期时间被成功清除则返回1,否则返回0(因为键不存在或键本来就是永久的)。

    使用set或getset命令为键赋值也会同时清除键的过期时间。

    使用expire命令会重新设置键的过期时间。

    其他只对键值进行操作的命令(如incr、lpush、hset、zrem)均不会影响键的过期时间。

    expire命令的seconds参数必须是整数,所以最小单位是1秒。如果想要更精确的控制键的过期时间应该使用pexpire命令,单位是毫秒。对应的可以使用pttl命令查看键的剩余时间。

    如果使用watch命令监测了一个拥有过期时间的键,该键时间到期自动删除并不会被watch命令认为该键被改变。

    2.实现缓存

        当服务器内存有限时,如果大量使用缓存键且过期时间设置得过长就会导致redis占满内存;另一方面如果为了防止redis占用内存过大而将缓存键的过期时间设得太短,就可能导致缓存命中率过低并且大量内存白白闲置。实际开发中会发现很难为缓存键设置合理的过期时间,为此可以限制redis能够使用的最大内存,并让redis按照一定的规则淘汰不需要的缓存键,这种方式在只将redis用作缓存系统时非常实用。

        具体设置方法为:修改配置文件的maxmemory参数,限制redis最大可用内存大小(单位是字节),当超出这个限制是redis会根据maxmemory-policy参数指定的策略来删除不需要的键值直到redis占用的内存小于指定内存。

    LRU(Least Recently Used)算法即最少最近使用,其认为最近最少使用的键在未来一段时间内也不会被用到,即当需要空间时这些键是可以被删除的。

    redis支持的淘汰键的规则:

    volatile-lru            使用LRU算法删除一个键(只对设置了过期时间的键)
    allkeys-lru             使用LRU算法删除一个键
    volatile-random    随机删除一个键(只对设置了过期时间的键)
    allkeys-random     随机删除一个键
    volatile-ttl             删除过期时间最近的一个键
    noeviction            不删除键,只返回错误
    事实上redis并不会准确地将整个数据库中最久未被使用的键删除,而是每次从数据库中随机取3个键并删除这3个键中最久未被使用的键。删除过期时间最接近的键的实现方法也是这样。3这个数字可以通过redis的配置文件中的maxmemoery-samples参数设置。
    ---------------------
    作者:panzm_csdn
    来源:CSDN
    原文:https://blog.csdn.net/panzm_csdn/article/details/79738510
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    win8应用的编码UI测试
    什么是Peer Review
    Android开发环境的搭建
    运用int.parse()判断闰年代码实现
    等价类划分方法的应用之EditBox(二)
    等价类划分方法的应用之EditBox
    集成测试
    数据可视化简介
    关于processing
    白盒测试VS黑盒测试
  • 原文地址:https://www.cnblogs.com/Jeely/p/10785050.html
Copyright © 2011-2022 走看看