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
版权声明:本文为博主原创文章,转载请附上博文链接!
Redis之过期时间的更多相关文章
- redis的过期时间和过期删除机制
一:设置过期时间 redis有四种命令可以用于设置键的生存时间和过期时间: EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒 PEXPIRE <K ...
- 面试题之redis的过期时间原理
1.消极方法:每次访问key时判断key是否已经过期: 2.积极方法:周期性的从设置了过期时间的key中选择一部分的key进行删除 a.随机测试20个带有timeout信息的key b.如果超过25% ...
- redis键过期时间
redis服务器中每个数据库都是一个redisDb,而redisDb实质上是一个字典的模型,数据库的每一个键都是一个字典的键值,对数据库的增删改查也就是对字典对象的增删改查. redis在维护带有过期 ...
- redis设置过期时间
- java操作Redis缓存设置过期时间
关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...
- redis学习(五) redis过期时间
redis过期时间 1.redis过期时间介绍 有时候我们并不希望redis的key一直存在.例如缓存,验证码等数据,我们希望它们能在一定时间内自动的被销毁.redis提供了一些命令,能够让我们对ke ...
- python中redis查看剩余过期时间以及用正则通配符批量删除key的方法
# -*- coding: utf-8 -*- import redis import datetime ''' # 1. redis设置过期时间的两种方式 expire函数设置过期时间为10秒.10 ...
- redis hash结构如何设置过期时间
Redis中有个设置时间过期的功能,即通过setex或者expire实现,目前redis没有提供hsetex()这样的方法,redis中过期时间只针对顶级key类型,对于hash类型是不支持的,这个时 ...
- Redis Key过期事件
解决方案1: 可以利用redis天然的key自动过期机制,下单时将订单id写入redis,过期时间30分钟,30分钟后检查订单状态,如果未支付,则进行处理但是key过期了redis有通知吗?答案是肯定 ...
随机推荐
- 关于RecyclerView你知道的不知道的都在这了(上)
目录 前言 目录 正文 1. LayoutManager 2. ViewHolder 3. LayoutParams 4. Adapter 5. RecyclerView 6. Recycler 7. ...
- ASPxGridView 选中主表一行数据,从表自动选中(勾选)对应的行
一.图解 下图为效果图,点击 [A表]种的某一行,[B表]会有与之相对于一行会被自动选中并且勾选上: 二.Html 代码 <html xmlns="http://www.w3.org/ ...
- vue2.4+vue-cli+webpack history模式打包后 刷新404
开启HTML5 History Mode后,尤其需要server端的支持,官方文档里就有介绍:(传送门: https://router.vuejs.org/zh-cn/essentials/histo ...
- 微信小程序开发之初探
本文是以一个简单的小例子,来简要讲解微信小程序开发步骤,希望促进学习分享. 概念 微信小程序,简称小程序,缩写xcx,英文mini program.是一种不需要下载安装即可使用的应用,它实现了应用“触 ...
- 一次电话Java面试的问题总结(JDK8新特性、哈希冲突、HashMap原理、线程安全、Linux查询命令、Hadoop节点)
面试涉及问题含有: Java JDK8新特性 集合(哈希冲突.HashMap的原理.自动排序的集合TreeSet) 多线程安全问题 String和StringBuffer JVM 原理.运行流程.内部 ...
- 深入理解Java虚拟机03--垃圾收集器与内存分配策略
一.概述 哪些内存需要回收? 什么时候回收? 如何回收? 二.对象已死吗 1.引用计数算法 定义:给对象添加一个引用计数器,当增加一个引用时,加1,当一个引用时,减1; 缺陷:当对象之间互相循环 ...
- (网页)bootstrap模态框手动关闭(转)
在菜鸟教程上的bootstrap 上面的模态框上看到的: 下面是一些可与 modal() 一起使用的有用的方法. $('#identifier').modal({ keyboard: false }) ...
- 【粗糙版】javascript的变量、数据类型、运算符、流程结构
本文内容: javascript的变量 javascript的数据类型 javascript的运算符 javascript的流程结构 首发日期:2018-05-09 javascript的变量 创建变 ...
- Jupyter Notebook默认工作路径的修改
相信每一个学习Python的童鞋,都尝试过Jupyter Notebook,所以我也就不多介绍,真的还不错哎这软件. 不过美中不足的,就是它的默认工作路径,每次打开都是系统盘的Administrato ...
- mssql sqlserver 禁止删除数据表中指定行数据(转自:http://www.maomao365.com/?p=5323)
转自:http://www.maomao365.com/?p=5323 摘要:下文主要讲述,如何禁止删除数据表中指定行数据 最近收到用户一个需求,禁止所有人删除”表A”中,ID 为1.2.3.4.5的 ...