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
版权声明:本文为博主原创文章,转载请附上博文链接!

Redis之过期时间的更多相关文章

  1. redis的过期时间和过期删除机制

    一:设置过期时间 redis有四种命令可以用于设置键的生存时间和过期时间: EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒 PEXPIRE <K ...

  2. 面试题之redis的过期时间原理

    1.消极方法:每次访问key时判断key是否已经过期: 2.积极方法:周期性的从设置了过期时间的key中选择一部分的key进行删除 a.随机测试20个带有timeout信息的key b.如果超过25% ...

  3. redis键过期时间

    redis服务器中每个数据库都是一个redisDb,而redisDb实质上是一个字典的模型,数据库的每一个键都是一个字典的键值,对数据库的增删改查也就是对字典对象的增删改查. redis在维护带有过期 ...

  4. redis设置过期时间

  5. java操作Redis缓存设置过期时间

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...

  6. redis学习(五) redis过期时间

    redis过期时间 1.redis过期时间介绍 有时候我们并不希望redis的key一直存在.例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁.redis提供了一些命令,能够让我们对ke ...

  7. python中redis查看剩余过期时间以及用正则通配符批量删除key的方法

    # -*- coding: utf-8 -*- import redis import datetime ''' # 1. redis设置过期时间的两种方式 expire函数设置过期时间为10秒.10 ...

  8. redis hash结构如何设置过期时间

    Redis中有个设置时间过期的功能,即通过setex或者expire实现,目前redis没有提供hsetex()这样的方法,redis中过期时间只针对顶级key类型,对于hash类型是不支持的,这个时 ...

  9. Redis Key过期事件

    解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定 ...

随机推荐

  1. float浮动的世界

    loat有四个属性,分别是: float:none:  没有浮动: float:left:  左浮动: float:right: 右浮动: float:inherit:继承父元素的浮动: ------ ...

  2. git常用命令总结以及用github来展示你的前端页面

    命令小结 命令  功能 git init 把当前文件夹初始化为默认的git库 git add 文件名 向git库中添加一个文件 git rm 文件名 从git库中删除一个文件 git status 查 ...

  3. 洛谷P5205 【模板】多项式开根(多项式sqrt)

    题意 题目链接 Sol 这个就很没意思了 求个ln,然后系数除以2,然后exp回去. #include<bits/stdc++.h> #define Pair pair<int, i ...

  4. 2018-08-22 为中文API的简繁转换库添加迟到的持续集成

    前两天在V2EX偶遇反馈帖第一次见以汉字命名的 Java 类 - V2EX, 于是复习了一下半年多没碰的项目program-in-chinese/zhconverter. 前文介绍了发布过程: 在Ma ...

  5. PyTorch使用总览

    PyTorch使用总览 https://blog.csdn.net/u014380165/article/details/79222243 深度学习框架训练模型时的代码主要包含数据读取.网络构建和其他 ...

  6. [Android][Framework] 添加系统服务

    新博客地址 http://wossoneri.github.io/2018/09/15/[Android][Framework]create-system-service/ 做系统开发,有时候需要自己 ...

  7. matlab练习程序(最小二乘多项式拟合)

    最近在分析一些数据,就是数据拟合的一些事情,用到了matlab的polyfit函数,效果不错. 因此想了解一下这个多项式具体是如何拟合出来的,所以就搜了相关资料. 这个文档介绍的还不错,我估计任何一本 ...

  8. android修改getprop读取到的ro.build.fingerprint属性

    在build/tools/buildinfo.sh中定义ro.build.fingerprint=$BUILD_FINGERPRINT. 然后在build/core/Makefile中给BUILD_F ...

  9. ansible部署 lnmp+wordpress

    如上,是项目的目录结构. common: 获取阿里云的yum源 mysql: 二进制安装mysql nginx: 编译安装nginx php-fpm:编译安装php-fpm wordpress: 获取 ...

  10. CSS margin 外边距 属性的位置关系

    padding:内边距 margin :外边距 margin:10px; 所有 4 个外边距都是 10px ******************************************* ma ...