redis中的bitmap实例分析
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文小编为大家详细介绍"redis中的bitmap实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"redis中的bitmap实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2025年11月07日redis中的bitmap实例分析
本文小编为大家详细介绍"redis中的bitmap实例分析",内容详细,步骤清晰,细节处理妥当,希望这篇"redis中的bitmap实例分析"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
1、BitMap是什么
通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省储存空间。2^32次方40亿数据只需要500M内存,需要内存少了8倍
2、setbit命令介绍
setbit key offset value #设置bitmapkey为20220328 uid为100的用户已签到1setbit 20220320 100 1 setbit 20220320 200 1 setbit 20220321 100 1setbit 20220321 300 1 getbit 20220320 100 #返回1,说明这个用户已签到了 bitcount 20220320 #获取bitmap数量
bitmap的坑
127.0.0.1:6400> setbit bittest 100 1 #设置不存在的offset返回0(integer) 0127.0.0.1:6400> setbit bittest 100 1 #设置已存在的offset返回1(integer) 1
setbit maxKey 4000000000 1 #直接弄了你600多M内存
/** * 布隆过滤器bloom Filter * 1.百万分之一的概率哈希冲突,所以有存在的不一定存在,但是不存在的百分百不存在 * 2.不能删除,删除的时候不能简单的直接置为0,可能会影响其他元素的判断,其实问题不大一般生产数据也不会删除的,都是软删除 * 3.新增数据时候写入bloom Filter * 4.2^32次方40亿数据内存占用才600M,超级省内存,查找速度非常快,160M内存可以在千万级数据做到1%的误判 * 5.bitmap根据offset去申请内存的,所以要省内存的情况要限制offset值 */ public function bloomAction(){ $t1 = time(); for($i=0;$i<99;$i++){ $bl = new BloomFilter(); //$str = "1https://arnaud.le-blanc.net/php-rdkafka-doc/phpdoc/book.rdkafka.html?id=".time(); $str = "https://dasda.le-blanc.net/php-rdkafka-doc/phpdoc/book.rdkafka.html?id=".mt_rand(1,99999999); p($str); $res1 = $bl->JSHash($str);//两次哈希3s,md5哈希重复的概率是百万分之一 p($res1); } //p($res); $t2 = time(); echo $t2-$t1; } /** * 布隆过滤器初始化 bloom Filter 执行 php index.php "index/demo/loadDb2bloom" */ public function isExistBloomAction(){ $redis = redisCursor(); $email = input("email","","trim"); $tel = input("tel",""); $result = false; $msg = ""; if(filter_var($email,FILTER_VALIDATE_EMAIL)){ $key1 = "bloom_user_email"; $offset = BloomFilter::JSHash($email); $result = $redis->getbit($key1,$offset); $msg = $email; }elseif($tel){ $key2 = "bloom_user_telephone"; $offset = BloomFilter::JSHash($tel); $result = $redis->getbit($key2,$offset); $msg = $tel; } $result?apiSuccess($msg.",已存在"):apiError($msg.",不存在"); } /** * 布隆过滤器初始化 bloom Filter 执行 php index.php "index/demo/loadDb2bloom" */ public function loadDb2bloomAction(){ $time1 = time(); $redis = redisCursor(); $key1 = "bloom_user_email"; $key2 = "bloom_user_telephone"; //setbit() offset 必须是数字,value必须是1或0 //$redis->setbit($key,30,1); $table = "user"; $pkid = "id"; $field1 = "email"; $field2 = "telephone"; $maxid = Db::name($table)->max($pkid); $size = 5000; $page = ceil($maxid/$size); for($i=0;$i<$page;$i++){ $start = $i*$size; $where = " $pkid between ".$start." and ".($start+$size); $res = Db::name($table)->where($where)->field("$field1,$field2")->select(); if($res){//同步到bitmap foreach($res as $k=>$v){ //布隆过滤器 1.存在的不一定存在, 2.不存在的100%不存在(原因,哈希冲突可能用100W分之一的可能重复) //所以注册的时候判断不存在的,百分百可以注册,存在的可以查询一下数据库是否真的不存在 $value1 = BloomFilter::JSHash($v["$field1"]); $value2 = BloomFilter::JSHash($v["$field2"]); $redis->setbit($key1,$value1,1);//email去重 $redis->setbit($key2,$value2,1);//mobile去重 } } $time2 = time(); echo $where." 消耗时间 ".($time2-$time1).PHP_EOL; } $time3 = time(); echo " 总消耗时间 ".($time3-$time1).PHP_EOL; }> 2)); } $hashNum = ($hash % 0xFFFFFFFF) & 0xFFFFFFFF; //为了节省内存,超过10亿就对半拆,10亿,这时候大约是130M内存占用,千万级数据可以做到1%误判率,内存足够可以不用判断,直接生成就行了 //如果数据过4000W的话不用限制了,因为生成的数据最大也是2^32次方40多亿,此时内存占用大概在600M封顶了 if($limitMemory){ if($hashNum>4000000000){ $hashNum = intval($hashNum/5); }elseif($hashNum>3000000000){ $hashNum = intval($hashNum/4); }elseif($hashNum>2000000000){ $hashNum = intval($hashNum/3); } } return $hashNum; }}读到这里,这篇"redis中的bitmap实例分析"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
内存
数据
哈希
限制
过滤器
布隆
实例
实例分析
分析
元素
文章
时候
不用
内容
函数
数字
时间
概率
用户
百分
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
北碚区工商软件开发服务代理商
数据库中关系模型的作用
上海索拉软件开发有限公司
云数据库管控核心技术要点
哈利波特各服务器之间通吗
iis服务器数据库在哪了
草蜢网络技术
sdc数据库中企业海外并购经验
社交软件开发怎么实现通信
简单介绍it网络技术
大象数据库怎么隐藏字段
卫视软件开发
帮网络安全手抄报
公安系统网络安全渗透工程师做什么工作
天津电子网络技术学院
日产逍客音乐找不到服务器
网络安全5000论文
学网络技术有前景吗
大石桥天气预报软件开发
南京软件开发怎么进国企
数据库找到字段并显示红色
数据库查询优化的艺术
信息网络安全自检
数据库原理 pdf
qq邮箱服务器错误
网吧网络安全审核流程
计算机网络技术的学习软件
app软件开发百度云
联通外包公司做软件开发
局域网登录服务器