文档章节

Redis统计一个用户在一段时间内的登录次数

go2school
 go2school
发布于 2015/04/17 15:21
字数 281
阅读 2342
收藏 15

我使用redis的setbit和bitcount来进行这个操作。需要注意的是setbit修改的是bit位置,而bitcount检查的是byte位置,两者相差有8的倍数。伪代码如下

//计算两个日期之间的差值
long daysBetween(Date date1,Date date2)  
{  
        Calendar cal = Calendar.getInstance();  
        cal.setTime(date1);  
        long time1 = cal.getTimeInMillis();               
        cal.setTime(date2);  
        long time2 = cal.getTimeInMillis();       
        long between_days=(time2-time1)/(1000*3600*24);  
          
       return Long.parseLong(String.valueOf(between_days));         
}  
   
//根据日期,得到一个整数位数
long dayIndex(Date date1) throws ParseException
 {
  String d0 = "2010-01-01 00:00:00";  
  Date date0 = simpledate.parse(d0);
  return daysBetween(date0, date1);//取参数日期与2010年1月1日的差值
 }



 //调用redis的setbit方法,键为用户名,位置为天数乘8,值为true
boolean setUserLoginday(Jedis redis, String user, Date currentDate)
{        
        long day_position = dayIndex(currentDate);    
        
        //乘以8的原因是这个操作修改的是bit位置
        //然而bitcount修改操作的是byte位置
        return redis.setbit(user, day_position * 8, true);  
}




//调用redis的bitcount方法计算,键为用户名,在两个日期之间登录的天数
long countUserLoginDays(Jedis redis, String user, Date fromdate, Date todate) throws ParseException {           
  long from_day_position = DataTransformer.dayIndex(fromdate);
  long to_day_position = DataTransformer.dayIndex(todate);
    return redis.bitcount(key, from_day_position, to_day_position);            
    }

© 著作权归作者所有

共有 人打赏支持
go2school
粉丝 11
博文 34
码字总数 14674
作品 0
技术主管
私信 提问
浅谈 Redis 数据库的键值设计

丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解...

红薯
2011/09/12
21.7K
12
浅谈REDIS数据库的键值设计

丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解...

Jean
2014/04/09
0
0
求教java如何限制一点时间内登录错误次数?

主要是一定时间内不知道如何实现,登录失败次数怎么记录,是专门建立一张表好呢,还是怎么着,还是用redis之类的记录,如何确保是在规定时间内输入了相应的错误次数

开源中国技术顾问
2016/04/27
960
9
阿里P8架构师谈:如何搭建亿级并发系统的性能指标体系

性能指标的分类 为了更好的去监控整个系统的性能,做好全流程的优化,主要分为3类: 1.感知系统性能 这类指标主要从工程师的角度去衡量,如后端的: 响应时间 当前并发的用户数 请求数 请求的...

小刀爱编程
09/28
0
0
如何优雅地使用Redis之位图操作

前言 在进入今天的主题前,先简单地解释下Redis中的位图到底是什么。Redis官方文档对于位图的介绍如下: 位图不是一个真实的数据类型,而是定义在字符串类型上的面向位的操作的集合。由于字符...

不才黄某
08/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

hanlp在Python环境中的安装失败后的解决方法

Hanlp是由一系列模型与算法组成的javag工具包,目标是普及自然语言处理再生环境中的应用。有很多人在安装hanlp的时候会遇到安装失败的情况,下面就是某大神的分享的在python环境中安装失败的...

左手的倒影
23分钟前
1
0
【更新】Infragistics Ultimate UI for WPF v18.2(二):分类图

下载Infragistics Ultimate UI for WPF最新版本 Infragistics Ultimate UI for WPF是一款提供高速的网格和图表,轻松创建仿Office应用程序的WPF界面框架,从广度和深度两方面使得开发者在缩短...

电池盒
24分钟前
1
0
android沉浸式状态栏封装—教你玩出新花样

项目中我们有时候都要用的透明状态栏(这里也成沉浸式状态栏),今天介绍一个gyf-dev写的一个封装状态栏开源框架 效果图如下: 正文 从Android4.4开始,才可以实现状态栏着色,并且从5.0开始...

终端研发部
24分钟前
1
0
Java关键字之transient、native

transient Java中提供Serilizable接口,实现该接口的对象就可以被序列化。如果这个类的有些属性不需要被序列化,使用transient关键修饰字段即可。 native native关键字说明其修饰的方法是一个...

勇敢的飞石
26分钟前
1
0
canal 修改mysql数据后Java客户端无反应的问题解决方案

canal client例子: package com.study.canal;import java.net.InetSocketAddress;import java.util.List;import com.alibaba.otter.canal.client.CanalConnector;import com.al......

xtof
26分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部