Redis整理(3)之bitmap的应用
2014-12-09 10:32
134 查看
场景分析:如果叫你设计一个表,存放了userID和性别或者是账户存在状态。
userID sex status
1 0 1
2 1 1
3 1 1
.......
一般思路用数据库关系表的话,也还OK,但是如果这个表很大,上亿级别?
这时候可以考虑用redis中的bitmap来轻易解决
分别设置两张bitmap。
sexmap statusmap
例如对第一条记录进行存储
$userid=1
$redis->setbit('sexmap',$userid,0);//设置下标为1,代表女性,此时女生数为1,位数上值默认为0
$redis->setbit('statusmap',$userid,1);
$redis->getbit('sexmap',$userid);//获取userID=1的用户的性别
综上,bitmap适用于那些记录性别或者状态值,枚举于0、1的字段!
userID sex status
1 0 1
2 1 1
3 1 1
.......
一般思路用数据库关系表的话,也还OK,但是如果这个表很大,上亿级别?
这时候可以考虑用redis中的bitmap来轻易解决
分别设置两张bitmap。
sexmap statusmap
例如对第一条记录进行存储
$userid=1
$redis->setbit('sexmap',$userid,0);//设置下标为1,代表女性,此时女生数为1,位数上值默认为0
$redis->setbit('statusmap',$userid,1);
$redis->getbit('sexmap',$userid);//获取userID=1的用户的性别
综上,bitmap适用于那些记录性别或者状态值,枚举于0、1的字段!
<?php /* $redis->setbit(key,offset,value);value =0|1 思考,我们这个bitmap可以存多少位? 一个字节占8位 set('bitmap',a); a的用二进制位表示01100001 这个即为97,也就是ASCII编码值 redis可达到512M/per key 512M=512*1024KB=512*1024*1000B=512*1024*1000*8bit=40亿+ 化整为零40亿,也就是说一位代表一个用户,40亿可以代表40亿个用户! 但是int 有符号整型取值范围 20亿+,所以bitmap位数只能到20亿个 */ //应用场景,我们有一张表,用来记录用户的性别,男位数值0,女为数值1 //假设userid=1的用户为女,那么可以如下设置 $userid = 1; $redis->setbit('sexmap',$userid,1);//设置下标为1,代表女性,此时女生数为1 echo "<hr>"; echo "userid=20亿性别:"; print $redis->getbit('sexmap',2000000000);//最多可存储20亿,位数上的值如果没设置默认为0,且设置只能0,1选择 echo "<hr>"; echo "女生总数:"; print $redis->bitcount('sexmap');//对女生的统计
相关文章推荐
- redis 的bitmap 开源包 bitmapist的应用
- 一看就懂系列之 详解redis的bitmap在亿级项目中的应用
- Redis安装整理(window平台和Linux平台)及在java应用
- 复习整理7:Redis数据库的基本应用
- Redis应用场景-整理
- BitMap算法应用:Redis队列滤重优化
- ArcGIS入门与应用相关资料整理
- 整理一个ANT在J2EE项目中的应用,含预编译JSP和打包WAR/EAR文件!
- 整理一个ANT在J2EE项目中的应用,含预编译JSP和打包WAR/EAR文件!
- 使用Cache-Control和gzip提升tomcat应用性能(整理)
- Hook学习资料整理第一节----hook的应用
- 整理一个ANT在J2EE项目中的应用,含预编译JSP和打包WAR/EAR文件!
- linux整理笔记之十:Raid与Lvm的综合应用实例
- 整理一个ANT在J2EE项目中的应用,含预编译JSP和打包WAR/EAR文件!
- 关于一些Google Map API应用开发的资源收集整理
- 国庆生活--应用软件整理
- 整理一个ANT在J2EE项目中的应用,含预编译JSP和打包WAR/EAR文件!
- Session在ASP.NET中的应用资料整理
- flash lite2.0学习笔记之—flash lite 支持的键及其应用整理
- [整理]ASP与数据库应用..