Redis学习笔记(八)进阶之生存时间
来源:互联网 发布:lua ide vscode 编辑:程序博客网 时间:2024/05/18 03:16
Redis中可以使用EXPIRE命令设置一个键的生存时间,到时间后Redis会自动删除它。
EXPIRE key seconds
如果想知道一个键还有多久的时间会被删除,可以使用TTL命令,返回值是键的剩余时间。当键不存在或者没有设置生存时间时,返回-1。
redis>SET foo bar
OK
redis>EXPIRE foo 20
(integer)1
redis>TTL foo
(integer)15
redis>TTL foo
(integer)-1
如果想取消键的生存时间设置,可以使用PERSIST命令。如果生存时间被成功清除则返回1;否则返回0(因为键不存在或键本来就是永久的)。
使用SET、或者GETSET命令为键赋值也会同时清除键的生存时间。
redis> EXPIRE foo 20
(integer)1
redis> SET foo bar
OK
redis> TTL foo
(integer)-1
其他只对键值进行操作的命令(如INCR、LPUSH、HSET、ZREM)均不会影响键的生存时间。
PEXPIRE与EXPIRE命令相似,但是其单位是毫秒。
EXPIREAT和PEXPIREAT不常用,EXPIREAT的单位是Unix时间,表示键的生存时间的截止时间。PEXPIREAT命令的单位是毫秒。
redis> SET foo bar
OK
redis> EXPIREAT foo 1351858600
(integer)1
redis> TTL foo
(integer)142
redis> PEXPIREAT foo 1351858700000
(integer)1
实现访问频率限制之一:
$isKeyExists= EXISTS rate.limiting:$IP
if$isKeyExists is 1
$times = INCR rate.limiting:$IP
if $times > 100
print访问频率超过了限制,请稍后再试。
exist
else
MULTI
INCR rate.limiting:$IP
EXPIRE $keyName 60
EXEC
实现访问频率限制之二:
$listLen= LLEN rate.limiting:$IP
if$listLen < 10
LPUSH rate.limiting:$IP now()
else
$time = LINDEX rate.limiting:$IP -1
if now() - $time < 60
print访问频率超过了限制,请稍后再试。
else
LPUSH rate.limiting:$IP now()
LTRIM rate.limiting:$IP 0 9
实现缓存:
可以限制Redis能够使用的最大内存,并让Redis按照一定的规则淘汰不需要的缓存键,这种方式在只将Redis用作缓存系统时非常的使用。
具体设置方法:修改配置文件的maxmemory参数,限制Redis最大可用内存大小(单位字节),当超出了这个限制时,Redis会依据maxmemory-policy参数指定的策略来删除不需要的键,直到Redis占用的内存小于指定内存。
LRU(Least Recently Used)
规则
说明
volatile-lru
使用LRU算法删除一个键(只对设置了生存时间的键)
allkeys-lru
使用LRU算法删除一个键
volatile-random
随机删除一个键(只对设置了生存时间的键)
allkeys-random
随机删除一个键
volatile-ttl
删除生存时间最近的一个键
noeviction
不删除键,只返回错误
- Redis学习笔记(八)进阶之生存时间
- Redis生存时间--Redis系列八
- Redis学习笔记(八)redis之lua脚本学习
- redis学习-事物,生存时间
- Redis基础之生存时间
- PHP学习笔记八之字符串(进阶篇)
- 八 redis学习笔记之主从复制
- redis学习笔记八之主从复制
- redis学习笔记八之主从复制
- 八 redis学习笔记之主从复制
- Redis学习笔记(七)进阶之事务
- Redis学习笔记(九)进阶之排序
- Redis学习笔记(十)进阶之消息通知
- Redis学习笔记-进阶
- Redis学习笔记之八:Redis的事务
- redis源码分析(八)、redis数据结构之压缩ziplist--------ziplist.c ziplist.h学习笔记
- Android学习笔记进阶八之Matrix矩阵
- 「Redis学习笔记」生存周期
- oracle用户远程建表、用户、授权、导入数据
- java实现将将时间段分成8段,判断当前时间在哪一段时间里?
- require.js学习笔记
- Android判断当前的android设备是否处于联网状态
- oracle select any dictionary & oracle授权详解
- Redis学习笔记(八)进阶之生存时间
- 【C/C++学院】0825-类模板/final_override/类模板与普通类的派生类模板虚函数抽象模板类/类模板友元/位运算算法以及类声明/Rtti 实时类型检测/高级new创建/类以及函数包装器
- Linux下android应用安装
- EXT.NET GridPanel 鼠标经过时字体加粗以及改变颜色
- java多态+多态中隐含的问题
- Kalman滤波器
- LESS的使用
- python的os.path模块函数功能
- ios把按钮切成圆形