位运算在redis中非常的方便使用,并且理由利用这个可以实现很多特殊的功能。这也迫使我去研究更多的redis提供的函数,只有研究的多,思路才能够更加开放。今天我就对strings下面的几个函数进行了测试,也收获颇丰。

使用setBit和bitCount可以实现用户活跃天数的统计,大体的思路如下:
我们网站今天第一天上线,某用户taoshihan,今天有访问那么我就记一下,网站第一天,taoshihan访问1;
网站第二天,taoshihan访问1;网站第80天,taoshihan访问1;其余时间没有访问过,那么我们统计得出taoshihan活跃天数为3。

使用代码体现为如下,具体解释可以查看视频:
https://www.bilibili.com/video/av70912075/

//使用setBit和bitCount实现用户在线天数的统计
$redis->set("taoshihan",'@');//@符号的二进制形式为 01000000
$redis->setBit("taoshihan",1,1);
$redis->setBit("taoshihan",2,1);
$redis->setBit("taoshihan",80,1);
$v=$redis->bitCount("taoshihan");
var_dump($v);//输出3

<?php
$redis=new Redis();
$redis->connect('127.0.0.1', 6379); //append-将值附加到键
$redis->set('name','taoshihan');
$redis->append('name',' very good');
$v=$redis->get('name');
var_dump($v);//string(19) "taoshihan very good" //对字符串二进制位为1的个数进行统计
$redis->set('name','a');
$v=$redis->bitCount('name');
var_dump($v);//int(3) //对多个字符串进行位运算
$redis->set("test1",'a');
$redis->set("test2",'b');
$redis->bitop("OR",'restkey','test1','test2');
$v=$redis->get('restkey');
var_dump($v);//string(1) "c" //更改字符串的指定位
$redis->set("name",'a');//a的二进制形式 01100001
$redis->setBit("name",3,1);//从左到右数,从0开始
$v=$redis->get("name");
var_dump($v);//输出q,二进制为01110001 //使用setBit和bitCount实现用户在线天数的统计
$redis->set("taoshihan",'@');//@符号的二进制形式为 01000000
$redis->setBit("taoshihan",1,1);
$redis->setBit("taoshihan",100,1);
$redis->setBit("taoshihan",150,1);
$v=$redis->bitCount("taoshihan");
var_dump($v);//输出3

[视频教程] redis中的bit运用统计用户在线天数的更多相关文章

  1. redis中插入用户集合的语句,有四个属性

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  2. 大数据学习day34---spark14------1 redis的事务(pipeline)测试 ,2. 利用redis的pipeline实现数据统计的exactlyonce ,3 SparkStreaming中数据写入Hbase实现ExactlyOnce, 4.Spark StandAlone的执行模式,5 spark on yarn

    1 redis的事务(pipeline)测试 Redis本身对数据进行操作,单条命令是原子性的,但事务不保证原子性,且没有回滚.事务中任何命令执行失败,其余的命令仍会被执行,将Redis的多个操作放到 ...

  3. Redis中5种数据结构的使用场景介绍

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/108.html?1455861435 一.redis 数据结构使用场景 原 ...

  4. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(八) 之 用 Redis 实现用户在线离线状态消息处理

    前言 上篇的预告好像是“聊天室的小细节,你都注意到了吗?”.今天也是为那篇做铺垫吧.之前的版本有好多问题,比如:当前登录用户是否合法问题,userid参数如果随便传后台没有验证.还有一个致命的问题,用 ...

  5. 关于Redis中的serverCron

    1.serverCron简介 在 Redis 中, 常规操作由 redis.c/serverCron 实现, 它主要执行以下操作 /* This is our timer interrupt, cal ...

  6. Redis中7种集合类型应用场景

    StringsStrings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更 ...

  7. Redis中7种集合类型应用场景&redis常用命令

    Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部 ...

  8. redis中5种数据结构的使用

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  9. 超大批量删除redis中无用key+配置

    目前线上一个单实例redis中无用的key太多,决定删除一部分. 1.删除指定用户的key,使用redis的pipeline 根据一定条件把需要删除的用户统计出来,放到一个表里面,表为 del_use ...

随机推荐

  1. Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目

    Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目 https://blog.csdn.net/alinyua/article/details/8303 ...

  2. linux下关闭selinux

    找到 /etc/sysconfig/selinux 文件 修改 SELINUX=enable 使之 SELINUX=disable 重启 reboot

  3. python logging模块“另一个程序正在使用此文件,进程无法访问。”问题解决办法

    在多进程下使用python的logging模块,经常会遇到"另一个程序正在使用此文件,进程无法访问."的错误. 解决办法: https://github.com/Preston-L ...

  4. POJ1961Period(kmp+循环节)

    传送门 题目大意:输出字符串所有前缀的循环节个数,下标从1开始,i 和1-i循环节的个数 题解:网上摘得 KMP最小循环节.循环周期: 定理:假设S的长度为len,则S存在最小循环节,循环节的长度L为 ...

  5. 【洛谷5363】[SDOI2019] 移动金币(动态规划)

    点此看题面 大致题意: 有\(n\)个格子,让你摆放\(m\)个金币.二人博弈,每次选择一个金币向左移任意格,无法移动者输.问有多少种方案使先手必胜. 阶梯\(Nim\) 阶梯\(Nim\)的基本模型 ...

  6. Python进阶小结

    目录 一.异常TODO 二.深浅拷贝 2.1 拷贝 2.2 浅拷贝 2.3 深拷贝 三.数据类型内置方法 3.1 数字类型内置方法 3.1.1 整型 3.1.2 浮点型 3.2 字符串类型内置方法 3 ...

  7. Yii2处理密码加密及验证

    在Yii2中提供了密码加密以及验证的一系列方法,方便我们的使用,它使用的是bcrypt算法.查看源码我们可以发现它使用的是PHP函数password_hash()和crypt()生成. 加密: /** ...

  8. Mac OSX vim配色方案选择

    首先查看系统自带的vim配色种类: ls /usr/share/vim/vim73/colors 大致输出如下: README.txt default.vim elflord.vim morning. ...

  9. vsc 自定义快速生成vue模板

    1.安装vscode 官网地址:https://code.visualstudio.com/ 2.安装一个插件,识别vue文件 插件库中搜索Vetur,下图中的第一个,点击安装,安装完成之后点击重新加 ...

  10. 推荐 | 中文文本标注工具Chinese-Annotator(转载)

    自然语言处理的大部分任务是监督学习问题.序列标注问题如中文分词.命名实体识别,分类问题如关系识别.情感分析.意图分析等,均需要标注数据进行模型训练.深度学习大行其道的今天,基于深度学习的 NLP 模型 ...