zset (Sorted Set)是set的升级版本, 在set的基础上增加了一个顺序(或者权重)值属性, 属性在添加修改元素时候可以指定. 每次指定后zset会自动重新按新的值调整顺序. 可以理解为有两列字段的数据表, 一列存value, 一列存顺序编号.

在Redis中, 就会保存一系列的列表, 每个列表是某个IP最近的新建session的记录. 服务端在每次创建session时, 根据ip将此时的(session id, timestamp)记录加入一个zset, 用removeRangeByScore清理时间跨度之外的数据, 检查数量是否超出限制, 最后将整个zset的过期时间更新一下.

对于新建session数量超出的IP, 可以停止新建session, 或将其放入全局黑名单.

    @Override
public int insert(SessionDTO dto) {
// ANTI FLD
RedisZset keyIp = redisFactory.getZset(ID + ":ip:" + dto.getIp());
keyIp.removeRangeByScore("-inf", String.valueOf(System.currentTimeMillis() - RATE_TIME_FRAME));
if (keyIp.size() >= RATE_THRESHOLD) {
logger.error("ANTI FLD: {}", dto.getIp());
return 0;
}
keyIp.add(dto.getId(), System.currentTimeMillis());
keyIp.exipre(RATE_TIME_FRAME);
// ANTI FLD END
redisFactory.pipeline(
(Pipeline pipeline) -> {
pipeline.hset((ID + ":db").getBytes(), dto.getId().getBytes(), SerializeUtil.serialize(dto));
pipeline.zadd(ID + ":" + ORDERBY[0], dto.getUpdatedAt(), dto.getId());
pipeline.zadd(ID + ":" + ORDERBY[1], dto.getStartedAt(), dto.getId());
long expiredAt = dto.getUpdatedAt() + ((dto.getAutologin() == 0) ? ((dto.getUserId().equals(UserDTO.ANONYMOUS_UID)) ? 0 : TTL_LOGIN) : TTL_AUTOLOGIN);
pipeline.zadd(ID + ":" + ORDERBY[2], expiredAt, dto.getId());
pipeline.zadd(ID + ":" + ORDERBY[3], SerializeUtil.score(dto.getUserId()), dto.getId());
});
return 1;
}

用Redis的zset防御Session Flood的更多相关文章

  1. Redis安装及实现session共享

    一.Redis介绍 1.redis是key-value的存储系统,属于非关系型数据库 2.特点:支持数据持久化,可以让数据在内存中保存到磁盘里(memcached:数据存在内存里,如果服务重启,数据会 ...

  2. Using Redis to store php session

    Using Redis to store php session 默认情况下,php将会将session信息存储在文件系统上,在单机情况下没有问题,但是当系统负载增大,或者在对系统可用性要求很高的场景 ...

  3. PHP中Redis替代文件存储Session语句

    php默认使用文件存储session,如果并发量大,效率非常低.而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session. 这里,介绍下php的 session_set_s ...

  4. nginx+tomcat+redis的集群+session共享

    nginx+tomcat+redis的集群+session共享 环境准备 1.tomcat版本:tomcat7 tomcat下载及安装,目前很多好的资源和步骤,此处省略. 2.jdk版本:jdk1.7 ...

  5. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  6. Redis之Zset

    一.Redis之Zset简介 1. 有序集合Zset是String类型的有序集合. 2. Zset中每个元素都会关联一个double类型的分数值,redis通过分数值来为集合中所有成员进行从小到大排序 ...

  7. PHP中使用Redis接管文件存储Session详解

    前言 php默认使用文件存储session,如果并发量大,效率会非常低.而redis对高并发的支持非常好,可以利用redis替换文件来存储session. 最近就遇到了这个问题,之前找了网上的一套直播 ...

  8. PHP中如何使用Redis接管文件存储Session详解

    https://www.jb51.net/article/151580.htm 前言 php默认使用文件存储session,如果并发量大,效率会非常低.而redis对高并发的支持非常好,可以利用red ...

  9. Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库

    为什么要这样做? 默认情况下,Redis 服务会提供 16 个数据库,Laravel 使用数据库 0 (请见 Redis 文档)作为缓存和 Session 的存储. 在使用的过程中觉得这个默认的设置挺 ...

随机推荐

  1. Java SPI(Service Provider Interface)简介

    SPI 简介 SPI 全称为(Service Provider Interface),是JDK内置的一种服务提供发现机制. 一个服务(Service)通常指的是已知的接口或者抽象类,服务提供方就是对这 ...

  2. Oracle简单的备份和恢复-导出和导入(1)

    ylbtech-Oracle:Oracle简单的备份和恢复-导出和导入(1) Oracle简单的备份和恢复-导出和导入 1. 用户导出自己的表(emp,dept)返回顶部 1.1, 我们启动Oracl ...

  3. anaconda里面安装tensorflow

    这篇文章讲的比较好: https://blog.csdn.net/evaljy/article/details/70209957 用这篇文章的内容,能够安装成功

  4. iOS开发-16进制颜色转换

    项目中经常会用到颜色转换,有的是通过十六进制转成数字转颜色,想简单的点直接通过字符串转一下,简单扩展了一下分类UIColor,代码如下: +(UIColor *)colorWithHex:(NSStr ...

  5. Tag Archives: 海明距离

    在前一篇文章 <海量数据相似度计算之simhash和海明距离> 介绍了simhash的原理,大家应该感觉到了算法的魅力.但是随着业务的增长 simhash的数据也会暴增,如果一天100w, ...

  6. NLP 中的embedding layer

    https://blog.csdn.net/chuchus/article/details/78386059 词汇是语料库的基本元素, 所以, 使用embedding layer来学习词嵌入, 将一个 ...

  7. 强制开启android webview debug模式使用Chrome inspect

    强制开启android webview debug模式使用Chrome inspect https://blog.csdn.net/zhulin2609/article/details/5143782 ...

  8. (转)【Unity Shaders】Vertex Magic —— 访问顶点颜色

    转自:http://blog.csdn.net/candycat1992/article/details/38147767 本系列主要参考<Unity Shaders and Effects C ...

  9. Softmax 函数的特点和作用是什么?

    作者:张欣链接:https://www.zhihu.com/question/23765351/answer/98897364来源:知乎著作权归作者所有,转载请联系作者获得授权. softmax 回归 ...

  10. 如何检查显卡类型,DirectX和OpenGL的版本

    How To: Check the graphics card type and OpenGL version From: http://support.esri.com/technical-arti ...