转载请注明出处: 目录 1. HyperLogLog 的原理 2.使用步骤 3.实现请求ip去重的浏览量使用示例 4.Jedis客户端使用 5.Redission使用依赖 6.HyperLogLog 提供了哪些特性和方法 7.使用场景总结 1. HyperLogLog 的原理 Redis HyperLogLog基于一种称为HyperLogLog算法的概率性算法来估计基数. HyperLogLog使用一个长度为m的位数组和一些hash函数来估计集合中的唯一元素数. 在 HyperLogLog 算法…
如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现? 如果统计 PV 那非常好办,给每个网页一个独立的 Redis 计数器就可以了,这个计数器的 key 后缀加上当天的日期.这样来一个请求,incrby 一次,最终就可以统计出所有的 PV 数据. 但是 UV 不一样,它要去重,同一个用户一天之内的多次访问请求只能计数一次.这就要求每一个网页请求都需要带上用户的 ID,无论是登陆用户还是未登陆用户都需要一个唯一 ID 来…
如果我们要实现记录网站每天访问的独立IP数量这样的一个功能 集合实现: 使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP ,然后通过调用 SCARD 命令来得出独立 IP 的数量.举个例子,程序可以使用以下代码来记录 2014 年 8 月 15 日,每个网站访客的 IP :ip = get_vistor_ip()SADD '2014.8.15::unique::ip' ip然后使用以下代码来获得当天的唯一 IP 数量:SCARD '2014.8.1…
pfadd 用法和sadd一样 pfcount 用法和scard一样 127.0.0.1:6379> get lan (nil) 127.0.0.1:6379> pfadd lan js (integer) 1 127.0.0.1:6379> pfadd lan php (integer) 1 127.0.0.1:6379> pfcount lan (integer) 2 127.0.0.1:6379> pfadd lan php (integer) 0 127.0.0.1:…
openresty开发系列38--通过Lua+Redis 实现动态封禁IP 一)需求背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝提供服务. 二)设计方案实现 IP 黑名单的功能有很多途径:1.在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求:2.在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单:3.在应用层面,在请求服务之前检查一遍客户端 IP…
为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都是一致的. 这种机制确保了在诸如网络状况不佳的情况下消息的回复成功率,但是有时候由于服务器负荷.本身请求过程就需要好几秒才能完成等情况,多次重复的消息反而成了服务器的负担,甚至对业务和数据也可能造成影响. 针对这种情况,SDK增加了去重的设置,只需要在使用MessageHandler的时候加一句话即…
实现步骤如下: (1)新建一个java web工程 (2)新建servers包,新建类GetRequestIp,用来处理获取请求IP,GetRequestIp类完整代码如下: package servers; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GetRequestIp { public static void post(…
测算Redis处理实际生产请求的QPS/TPS Benchmark工具 redis发布版本中自带了redis-benchmark性能测试工具; 示例: 使用50个并发连接,发出100000个请求,每个请求的数据为2kb, 测试host为127.0.0.1 端口为6379的redis服务器性能: ./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -d 2 ... ====== SADD ====== 100000 requests com…
首先,HyperLogLog与布隆过滤器都是针对大数据统计存储应用场景下的知名算法. HyperLogLog是在大数据的情况下关于数据基数的空间复杂度优化实现,布隆过滤器是在大数据情况下关于检索一个元素是否在一个集合中的空间复杂度优化后的实现. 在传统的数据量比较低的应用服务中,我们要实现数据基数和数据是否存在分析的功能,通常是简单的把所有数据存储下来,直接count一下就是基数了,而直接检索一个元素是否在一个集合中也很简单. 但随着数据量的急剧增大,传统的方式已经很难达到工程上的需求.过大的数…
服务端获取客户端请求IP地址,常见的包括:x-forwarded-for.client-ip等请求头,以及remote_addr参数. 一.remote_addr.x-forwarded-for.client-ip remote_addr:指的是当前直接请求的客户端IP地址,它存在于tcp请求体中,是http协议传输的时候自动添加,不受请求头header的控制.因此,当客户端与服务器之间不存在任何代理的时候,通过remote_addr获取客户端IP地址是最准确,也是最安全的. x-forward…