bitMap原理 :
如下: index 从 0 到 9 ,依次对应到一个bit位上,如果index 代表用户id,bit位上的0 1分表 代表用户是否登录;
redis数据结构中 string 类型,包含了对bitmap的实现;在redis-cli中,可以通过setbit getbit 来对bit进行操作;本文通过jedis来对redis进行操作;
BitSet工具类:实现对通过jedis.get(key)取出的byte[]值与BitSet的转换
具体对java中BitSet操作,见 http://my.oschina.net/cloudcoder/blog/294810 ,该篇对bitSet用法介绍很详细;
redis工具类:
1 统计系统中某天用户登录的情况:以当天日期做为key ,比如 ‘20150410’ ,对应的 bitMap 的 index 用userId来标示,UserId这里用 long 型表示,如果id不是以0开头,可以加上相应的偏移量就OK了;如果该天用户登录,调用activeUser方法,来更改bitMap相应index上的标示;
如果我们想统计该天用户登录的数量,及登录的用户id,可以通过如下方法实现:
//该天用户总数
//该天登录所有的用户id
2 如果我们想统计n天,连续登录的用户数,及UserId:
如下: index 从 0 到 9 ,依次对应到一个bit位上,如果index 代表用户id,bit位上的0 1分表 代表用户是否登录;
redis数据结构中 string 类型,包含了对bitmap的实现;在redis-cli中,可以通过setbit getbit 来对bit进行操作;本文通过jedis来对redis进行操作;
BitSet工具类:实现对通过jedis.get(key)取出的byte[]值与BitSet的转换
具体对java中BitSet操作,见 http://my.oschina.net/cloudcoder/blog/294810 ,该篇对bitSet用法介绍很详细;
redis工具类:
1 统计系统中某天用户登录的情况:以当天日期做为key ,比如 ‘20150410’ ,对应的 bitMap 的 index 用userId来标示,UserId这里用 long 型表示,如果id不是以0开头,可以加上相应的偏移量就OK了;如果该天用户登录,调用activeUser方法,来更改bitMap相应index上的标示;
如果我们想统计该天用户登录的数量,及登录的用户id,可以通过如下方法实现:
//该天用户总数
//该天登录所有的用户id
2 如果我们想统计n天,连续登录的用户数,及UserId: