博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis-统计活跃用户
阅读量:5956 次
发布时间:2019-06-19

本文共 2659 字,大约阅读时间需要 8 分钟。

Bitmap(即Bitset)

Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR以及其它位操作。

package test.jedis;import java.text.SimpleDateFormat;import java.util.BitSet;import java.util.Date;import redis.clients.jedis.Jedis;public class UserJedisUtil {    public static Jedis redis = new Jedis("localhost", 6379);// 连接redis        public static void main(String [] args){        initLogin();    }            /**     * 初始化数据     * */    public static void initLogin(){                redis.flushDB();        //默认设置当天用户编号为 1,3,4,6,20的用户登陆        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");        String today=    format.format(new Date());        UserJedisUtil.activeUsers("daily_active_users:"+today, 1);        UserJedisUtil.activeUsers("daily_active_users:"+today, 3);        UserJedisUtil.activeUsers("daily_active_users:"+today, 4);        UserJedisUtil.activeUsers("daily_active_users:"+today, 6);        UserJedisUtil.activeUsers("daily_active_users:"+today, 20);                UserJedisUtil.activeUsers("daily_active_users:2016-06-27", 1);        UserJedisUtil.activeUsers("daily_active_users:2016-06-27",2);        UserJedisUtil.activeUsers("daily_active_users:2016-06-27", 8);                UserJedisUtil.activeUsers("daily_active_users:2016-06-26", 5);                    int i=UserJedisUtil.uniqueCount("daily_active_users",today);        System.out.println("用来统计某个用户操作在某天的活跃用户:"+i);                int i1=UserJedisUtil.uniqueCount("daily_active_users",today,"2016-06-27","2016-06-26");        System.out.println("用来统计多个日期的活跃用户数:"+i1);            }                /**     * 每日用户登陆记录     * */    public static boolean activeUsers(String action,long user_id){                return redis.setbit(action, user_id,true);    }             /**      * 用来统计在某天的活跃用户数      * key 的设计原则是每天一个key 格式为 daily_active_users:当日日期      * */    public static int uniqueCount(String action, String date) {          String key = action + ":" + date;          BitSet users = BitSet.valueOf(redis.get(key.getBytes()));          return users.cardinality();      }           /**     * 用来统计在一个指定多个日期的活跃用户数。计算方式:做Union操作     * 相当月多个日期的登陆用户的并集,在这个日期范围内登陆过的只计算一次。     * key 的设计原则是每天一个key 格式为 daily_active_users:当日日期     * */    public static int uniqueCount(String action, String... dates) {          BitSet all = new BitSet();          for (String date : dates) {              String key = action + ":" + date;              System.out.println(key);            BitSet users = BitSet.valueOf(redis.get(key.getBytes()));              all.or(users);          }          return all.cardinality();      }        }

 

转载于:https://www.cnblogs.com/zuolun2017/p/5623504.html

你可能感兴趣的文章
记一次数组工具类 交集,去重
查看>>
1134 Vertex Cover
查看>>
webpack4.x实战七,生产模式和开发模式分开打包
查看>>
五、箭头函数
查看>>
Python模拟入栈出栈操作
查看>>
C语言中的DEBUG
查看>>
Mac node js环境的安装与测试
查看>>
Swift开发之粒子动画的实现
查看>>
Android安全开发之ZIP文件目录遍历
查看>>
Android 资讯类App项目实战 第一章 滑动顶部导航栏
查看>>
AngularJS内置指令 ng-xxx
查看>>
学习C语言必须知道的理论知识(第三章-C语句)
查看>>
实现按字符串的第一个字符的首字母排序
查看>>
睡眠排序法-objective C版的代码
查看>>
对于数组使用sizeof(a)和使用sizeof(a[0])
查看>>
小猿圈WEB前端之HTML5+CSS3面试题(一)
查看>>
jsmin 使用方法
查看>>
375 Inscribed Circles and Isosceles Triangles 等腰三角形 内接圆 圆周率PI表示
查看>>
js如何在指定页面跳转到另一指定页面
查看>>
jQuery判断checked的三种方法
查看>>