redis 键值对 有效期设置
redis 键值对 有效期设置redis中可以使用expire命令设置一个键的生存时间,
到时间后redis会自动删除它<-----> 类比于javaweb系统临时数据 过期删除功能
expire 设置失效时间(单位/秒)
persist 取消失效时间
ttl/pttl(单位为 秒/毫秒) 查看键的剩余时间
返回三种值 -2(健已经不存在了) -1(表示永久有效) 大于0的数(还有多少有效时间)
pexpire设置失效时间(单位/毫秒)
expireat [key] unix时间戳1351858600
pexpireat [key] unix时间戳(毫秒)1351858700000
应用:
限时的优惠活动: 活动对应数据限时为1小时 则设置为1小时后失效
网站数据缓存(对于一些需要定时更新的数据)
比如排名,间隔10分钟做一次统计的话,那么排名的数据就可以设置 expire
网站访客访问频率限制(例如:1分钟最多访问10次): 用户ip作为健,默认值为1,incr命令,
set name zm
expire name 60 设置name失效时间为60S
ttl name 查看name健将要失效的剩余生存时间
persist name 取消name的失效时间
ttl name 如果返回是-1 则表示已经取消了name的失效时间 -1表示永久有效
redis 设置IP单位时间内访问次数, 比如 1分钟内只能让客户IP访问量3次,否则封IP:
- package bj.zm.redis;
- import org.junit.Test;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.Transaction;
- /**
- * 使用键的生存时间来实现控制用户访问网站的频率
- * @author Administrator
- *
- */
- public class TestWebSite {
- Jedis jedis = new Jedis("192.168.1.110", 6379);
- @Test
- public void test(){
- String ip = "192.168.1.1";// 客户IP
- website(ip);
- }
- //每次递增1,如果在60S内访问超过了3次 则 访问频率过高(防止抓取) 模拟的时候 连续执行多次junit来实现打印用户访问频率超限的效果
- private void website(String ip) {
- String value = jedis.get(ip);
- if(value==null){
- Transaction transaction = jedis.multi();
- transaction.incr(ip);
- transaction.expire(ip, 60);
- transaction.exec();
- }else{
- int intvalue = Integer.parseInt(value);
- if(intvalue<=3){
- jedis.incr(ip);
- }else{
- System.err.println("用户访问频率超限!");
- }
- }
- }
- }
redis 键值对 有效期设置的更多相关文章
- redis键值操作
1.1. redis键值操作 1.1.1. keys patten 查询相应的key 可以精确的查,也可以模糊的查 1.1.1.1. 通配符:* ? [] 在redis里,模糊查询key的时候有3个通 ...
- Redis 键值数据类型及基本操作
到目前为止,Redis 支持的键值数据类型如下: 字符串(String) 哈希(Map) 列表(list) 集合(sets) 有序集合(sorted sets) 1. String 字符串类型 s ...
- 7.Redis键值对数据库
1.Redis的安装以及客户端连接 安装:apt-get install redis-server 卸载:apt-get purge --auto-remove redis-server 启动:red ...
- python 对redis 键值对的操作
我们可以将Redis中的Hashes类型看成具有String Key和String Value的键值对容器.类似python中的dict,javascript的jaon,java 的map,每一个Ha ...
- springboot使用Redis,监听Redis键过期的事件设置与使用代码
我使用的是Windows下的Redis服务,所以一下Redis设置都是在Windows平台进行. 1.修改Redis配置文件 1.1:Windows下的Redis存在两个配置文件 修改带有servic ...
- Redis键值设计(转载)
参考资料:https://blog.csdn.net/iloveyin/article/details/7105181 丰富的数据结构使得redis的设计非常的有趣.不像关系型数据库那样,DEV和DB ...
- PhoneBean实体类的封装和map输出键值对的设置
之前我们写好了bean类型.现在我们再看看这个需求中,map和reduce各自的流程. Map阶段: 字段切分以后保留如下字段:以第一行为例,就保留13726230503112 2481 24681 ...
- 在linux系统中如何通过shell脚本批量设置redis键值对
业务逻辑:批量设置redis中手机号的验证码为888888: 准备shell脚本如下:将18888888100~18888888110的手机号验证码设置为888888: #!/bin/bash ;i& ...
- spring中订阅redis键值过期消息通知
1.首先启用redis通知功能(ubuntu下操作):编辑/etc/redis/redis.conf文件,添加或启用以下内容(过期通知): notify-keyspace-events Ex 或者登陆 ...
随机推荐
- C++中的双冒号作用
1. 作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分如:A,B表示两个类,在A,B中都有成员member.那么 ...
- ionic 股票列表 网络读取数据,实现下拉刷新,上拉加载
html: <ion-header> <ion-toolbar> <ion-title> 股票 </ion-title> </ion-toolba ...
- jq处理动画累加
问题:日程提醒(跟日历一样的切换效果),只用一个div来展示当天日程数据,每次清空div里的数据再加载数据,导致切换日期时,数据展示div有闪动,于是采用动画来进行过渡,这样就巧妙地避免了闪动: $( ...
- dotnet core 之 gRPC
dotnet core gRPC 原文在本人公众号中,欢迎关注我,时不时的会分享一些心得 HTTP和RPC是现代微服务架构中很常用的数据传输方式,两者有很多相似之处,但是又有很大的不同.HTTP是一种 ...
- 使用Alipay代码源,构建自己的Docker镜像
1. alipay 镜像仓库 地址 (自行换成自己的阿里镜像云DockerHub地址) https://cr.console.aliyun.com/repository/ 2.alipay 代码云 地 ...
- spring事务概念与获取事务时事务传播行为源码分析
一.事务状态:org.springframework.transaction.TransactionStatus isNewTransaction 是否是新事务 hasSavepoint 是否有保存点 ...
- elasticsearch原理学习
用es也差不多一年左右了,但是都是只会用,底层做了什么一窍不通,没有核心竞争力,循序渐进,一个一个攻破,理解的多了,读的多了,自然能力就上去了,es底层是基于lucene的,所以今天先从lucene下 ...
- 如何设计提高服务API的安全性(一)基础介绍
场景 现今越来越多公司提供了Sass平台服务,大部分也直接提供API.如快递鸟.微信Api.云服务.如何保证这些服务的安全性是一门重要的课题.如快递跟踪.机票查询等很便捷地影响着我们d的生活,对这些技 ...
- CTF——web安全中的一些绕过
function check($number) { $one = ord('1'); $nine = ord('9'); for ($i = 0; $i < strlen($number); $ ...
- 实验吧——NSCTF web200
题目地址:http://ctf5.shiyanbar.com/web/web200.jpg 打开就是个自定义加密函数,只要写出相应的解密算法就行 <?php function encode($s ...