Redis实现精准去重统计
随着数据量不断增加,在进行数据统计时,去重问题变得尤为重要。Redis是一个开源的高性能key-value存储系统,其提供了bitmap数据类型,可以用于实现快速的去重功能。本文将介绍如何使用Redis的bitmap类型实现精准去重统计。
1. Redis中的bitmap数据类型
Redis中的bitmap是一种特殊的字符串类型,可以表示一个二进制的位数组。bitmap可以用来存储一系列的二值数据,例如0和1,true和false等。bitmap的优点在于它可以非常紧凑地存储二进制数据,因此在Redis中使用bitmap可以节省大量的存储空间。
使用Redis的bitmap类型,只需要调用以下命令:
SetBIT key offset value
其中,key是要存储的bitmap的键值,offset是要设置的位的偏移量,value是要设置的值,value只能是0或1。
例如,以下代码将为key为”user:1″的bitmap的第10个位设置为1:
redis-cli SETBIT user:1 10 1
2. 精准去重统计
在实际开发中,常常需要进行去重统计,也就是统计某个数据集合中的不重复元素的数量。使用Redis的bitmap类型可以实现非常快速的去重统计功能。
具体的实现方法如下:
1)将每个元素转换成一个唯一的整数,可以使用字符串哈希函数等方法。
2)将每个整数对应到bitmap中的一个位,例如可以将整数模32的结果作为位的偏移量。
3)对于每个元素,使用SETBIT命令在相应的偏移量上设置对应的位。
4)对于所有设置过位的位置,使用BITCOUNT命令进行计数。
下面是一个示例代码,该代码实现了对一组字符串的去重统计,并输出了不重复元素的数量。
import redis
import hashlib
hash_func = hashlib.sha256
DEF hash_to_int(s):
h = hash_func(s.encode(‘utf-8’)).hexdigest()
return int(h, 16)
r = redis.Redis()
strings = [‘foo’, ‘bar’, ‘baz’, ‘foo’, ‘qux’, ‘baz’]
for s in strings:
i = hash_to_int(s)
offset = i % 32
r.setbit(‘string:uniq’, offset, 1)
count = r.bitcount(‘string:uniq’)
print(‘Unique strings:’, count)
运行结果为:
Unique strings: 4
这表示在字符串列表中,共有4个不同的元素。3. 总结使用Redis的bitmap类型可以实现非常快速的去重统计功能。在实际开发中,可以根据具体的需求,使用不同的哈希函数将数据映射到不同的位上,从而实现更好的去重效果。当然,由于bitmap所能表示的数据范围有限,因此对于较大的数据集合,可能需要划分成多个bitmap进行统计。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
初一数学上册知识点

初一数学(上)应知应会的知识点
代数初步知识
1. 代数式:用运算符号“+ - × ÷ …… ”连接数及表示数的字母的式子称为代数式.注意:用字母表示数有一定的限制,首先字母所取得数应保证它所在的式子有意义,其次字母所取得数还应使实际生活或生产有意义;单独一个数或一个字母也是代数式.
2.列代数式的几个注意事项:
(1)数与字母相乘,或字母与字母相乘通常使用“· ” 乘,或省略不写;
(2)数与数相乘,仍应使用“×”乘,不用“· ”乘,也不能省略乘号;
(3)数与字母相乘时,一般在结果中把数写在字母前面,如a×5应写成5a;
(4)带分数与字母相乘时,要把带分数改成假分数形式,如a× 应写成 a;
(5)在代数式中出现除法运算时,一般用分数线将被除式和除式联系,如3÷a写成 的形式;
(6)a与b的差写作a-b,要注意字母顺序;若只说两数的差,当分别设两数为a、b时,则应分类,写做a-b和b-a .
3.几个重要的代数式:(m、n表示整数)
(1)a与b的平方差是: a2-b2 ; a与b差的平方是:(a-b)2 ;
(2)若a、b、c是正整数,则两位整数是: 10a+b ,则三位整数是:100a+10b+c;
(3)若m、n是整数,则被5除商m余n的数是: 5m+n ;偶数是:2n ,奇数是:2n+1;三个连续整数是: n-1、n、n+1 ;
(4)若b>0,则正数是:a2+b ,负数是: -a2-b ,非负数是: a2,非正数是:-a2.
有理数
1.有理数:
(1)凡能写成 形式的数,都是有理数.正整数、0、负整数统称整数;正分数、负分数统称分数;整数和分数统称有理数.注意:0即不是正数,也不是负数;-a不一定是负数,+a也不一定是正数;p不是有理数;
(2)有理数的分类: ① ②
(3)注意:有理数中,1、0、-1是三个特殊的数,它们有自己的特性;这三个数把数轴上的数分成四个区域,这四个区域的数也有自己的特性;
(4)自然数Û 0和正整数;a>0 Û a是正数;a<0 Û a是负数;
a≥0 Û a是正数或0 Û a是非负数;a≤ 0 Û a是负数或0 Û a是非正数.
2.数轴:数轴是规定了原点、正方向、单位长度的一条直线.
3.相反数:
(1)只有符号不同的两个数,我们说其中一个是另一个的相反数;0的相反数还是0;
(2)注意: a-b+c的相反数是-a+b-c;a-b的相反数是b-a;a+b的相反数是-a-b;
(3)相反数的和为0 Û a+b=0 Û a、b互为相反数.
4.绝对值:
(1)正数的绝对值是其本身,0的绝对值是0,负数的绝对值是它的相反数;注意:绝对值的意义是数轴上表示某数的点离开原点的距离;
(2) 绝对值可表示为: 或 ;绝对值的问题经常分类讨论;
(4) |a|是重要的非负数,即|a|≥0;注意:|a|·|b|=|a·b|, .
5.有理数比大小:(1)正数的绝对值越大,这个数越大;(2)正数永远比0大,负数永远比0小;(3)正数大于一切负数;(4)两个负数比大小,绝对值大的反而小;(5)数轴上的两个数,右边的数总比左边的数大;(6)大数-小数 > 0,小数-大数< 0.
6.互为倒数:乘积为1的两个数互为倒数;注意:0没有倒数;若 a≠0,那么 的倒数是 ;倒数是本身的数是±1;若ab=1Û a、b互为倒数;若ab=-1Û a、b互为负倒数.
7. 有理数加法法则:
(1)同号两数相加,取相同的符号,并把绝对值相加;
(2)异号两数相加,取绝对值较大的符号,并用较大的绝对值减去较小的绝对值;
(3)一个数与0相加,仍得这个数.
8.有理数加法的运算律:
(1)加法的交换律:a+b=b+a ;(2)加法的结合律:(a+b)+c=a+(b+c).
9.有理数减法法则:减去一个数,等于加上这个数的相反数;即a-b=a+(-b).
10 有理数乘法法则:
(1)两数相乘,同号为正,异号为负,并把绝对值相乘;
(2)任何数同零相乘都得零;
(3)几个数相乘,有一个因式为零,积为零;各个因式都不为零,积的符号由负因式的个数决定.
11 有理数乘法的运算律:
(1)乘法的交换律:ab=ba;(2)乘法的结合律:(ab)c=a(bc);
(3)乘法的分配律:a(b+c)=ab+ac .
12.有理数除法法则:除以一个数等于乘以这个数的倒数;注意:零不能做除数, .
13.有理数乘方的法则:
(1)正数的任何次幂都是正数;
(2)负数的奇次幂是负数;负数的偶次幂是正数;注意:当n为正奇数时: (-a)n=-an或(a -b)n=-(b-a)n , 当n为正偶数时: (-a)n =an或 (a-b)n=(b-a)n .
14.乘方的定义:
(1)求相同因式积的运算,叫做乘方;
(2)乘方中,相同的因式叫做底数,相同因式的个数叫做指数,乘方的结果叫做幂;
(3)a2是重要的非负数,即a2≥0;若a2+|b|=0 Û a=0,b=0;
(4)据规律 底数的小数点移动一位,平方数的小数点移动二位.
15.科学记数法:把一个大于10的数记成a×10n的形式,其中a是整数数位只有一位的数,这种记数法叫科学记数法.
16.近似数的精确位:一个近似数,四舍五入到那一位,就说这个近似数的精确到那一位.
17.有效数字:从左边第一个不为零的数字起,到精确的位数止,所有数字,都叫这个近似数的有效数字.
18.混合运算法则:先乘方,后乘除,最后加减;注意:怎样算简单,怎样算准确,是数学计算的最重要的原则.
19.特殊值法:是用符合题目要求的数代入,并验证题设成立而进行猜想的一种方法,但不能用于证明.
整式的加减
1.单项式:在代数式中,若只含有乘法(包括乘方)运算。或虽含有除法运算,但除式中不含字母的一类代数式叫单项式.
2.单项式的系数与次数:单项式中不为零的数字因数,叫单项式的数字系数,简称单项式的系数;系数不为零时,单项式中所有字母指数的和,叫单项式的次数.
3.多项式:几个单项式的和叫多项式.
4.多项式的项数与次数:多项式中所含单项式的个数就是多项式的项数,每个单项式叫多项式的项;多项式里,次数最高项的次数叫多项式的次数;注意:(若a、b、c、p、q是常数)ax2+bx+c和x2+px+q是常见的两个二次三项式.
5.整式:凡不含有除法运算,或虽含有除法运算但除式中不含字母的代数式叫整式.
整式分类为: .
6.同类项:所含字母相同,并且相同字母的指数也相同的单项式是同类项.
7.合并同类项法则:系数相加,字母与字母的指数不变.
8.去(添)括号法则:去(添)括号时,若括号前边是“+”号,括号里的各项都不变号;若括号前边是“-”号,括号里的各项都要变号.
9.整式的加减:整式的加减,实际上是在去括号的基础上,把多项式的同类项合并.
10.多项式的升幂和降幂排列:把一个多项式的各项按某个字母的指数从小到大(或从大到小)排列起来,叫做按这个字母的升幂排列(或降幂排列).注意:多项式计算的最后结果一般应该进行升幂(或降幂)排列.
一元一次方程
1.等式与等量:用“=”号连接而成的式子叫等式.注意:“等量就能代入”!
2.等式的性质:
等式性质1:等式两边都加上(或减去)同一个数或同一个整式,所得结果仍是等式;
等式性质2:等式两边都乘以(或除以)同一个不为零的数,所得结果仍是等式.
3.方程:含未知数的等式,叫方程.
4.方程的解:使等式左右两边相等的未知数的值叫方程的解;注意:“方程的解就能代入”!
5.移项:改变符号后,把方程的项从一边移到另一边叫移项.移项的依据是等式性质1.
6.一元一次方程:只含有一个未知数,并且未知数的次数是1,并且含未知数项的系数不是零的整式方程是一元一次方程.
7.一元一次方程的标准形式: ax+b=0(x是未知数,a、b是已知数,且a≠0).
8.一元一次方程的最简形式: ax=b(x是未知数,a、b是已知数,且a≠0).
9.一元一次方程解法的一般步骤: 整理方程 …… 去分母 …… 去括号 …… 移项 …… 合并同类项 …… 系数化为1 …… (检验方程的解).
10.列一元一次方程解应用题:
(1)读题分析法:………… 多用于“和,差,倍,分问题”
仔细读题,找出表示相等关系的关键字,例如:“大,小,多,少,是,共,合,为,完成,增加,减少,配套-----”,利用这些关键字列出文字等式,并且据题意设出未知数,最后利用题目中的量与量的关系填入代数式,得到方程.
(2)画图分析法: ………… 多用于“行程问题”
利用图形分析数学问题是数形结合思想在数学中的体现,仔细读题,依照题意画出有关图形,使图形各部分具有特定的含义,通过图形找相等关系是解决问题的关键,从而取得布列方程的依据,最后利用量与量之间的关系(可把未知数看做已知量),填入有关的代数式是获得方程的基础.
11.列方程解应用题的常用公式:
(1)行程问题: 距离=速度·时间;
(2)工程问题: 工作量=工效·工时;
(3)比率问题: 部分=全体·比率;
(4)顺逆流问题: 顺流速度=静水速度+水流速度,逆流速度=静水速度-水流速度;
(5)商品价格问题: 售价=定价·折· ,利润=售价-成本, ;
(6)周长、面积、体积问题:C圆=2πR,S圆=πR2,C长方形=2(a+b),S长方形=ab, C正方形=4a,
S正方形=a2,S环形=π(R2-r2),V长方体=abc ,V正方体=a3,V圆柱=πR2h ,V圆锥= πR2h.
晶振6MHZ和12MHZ的51单片机延时程序的编写
这个程序你写的太不规范了。 改你的程序 MOV R7,#50 ;2 2代表机器周期D3: MOV R6,#50 ;2D2: MOV R5,#200 ;2D1: DJNZ R5,D1 ;2DJNZ R6,D2 ;2DJNZ R7,D3 ;2RET ;2 其实这个程序来做延迟程序是有误差的,而且很大。 实际延迟时间 t=2us+((2us*200+2us)*60)*50+2us= ...自己算吧 反正比1S延迟要高,仔细看看计算式子的顺序。 以基本2重循环思路来解决3重循环。 如果要求不高的话,用它来做1S延迟也可以。 下面来给你写一个通过定时,计数器来做延迟子程序。 (精确度很高)有关知识看定时计数器单元的介绍。 DELAY: MOV TMOD,#01H ;选择工作方式1 定时器0MOV TH0,#**MOV TLO,#**SETB TR0LOOP1: JNB TF0,LOOPCLR TF0SJMP MAIN** 的初始值计算方法 1000 000US=(-X)/TT=12*1/FOSCFOSC 即为晶振频率 用X的值除以256,商给TH0,余数给TL0这样,如果需要延迟子程序直接调用。 精确度极高。 希望对你有用。 不懂继续问
怎样计算制作LED电子屏
先介绍一下制作上用到的材料 (全部材料电子城有售)● 微动开关 (3-4元 一个)● LED 灯 (颜色:白、蓝、绿、红、灯、黄、自动闪灯等.....除自动闪灯外,所有颜色都有大头与细头两种) (1-5 元不等)● 电池 (银锌纽扣电池的好处有二:一是易于藏在模型中、二是一粒就有 3V 电流1. 制作开关步骤一:先选择出适用的微动开关 (当然尺寸要比模型部件细小)步骤二:由于模型胶较厚,所以先用工具将内部磨薄,与及在适当位置打开缺口,方便开关的按钮外露步骤三:把两条电线分别接上开关的正极与负极步骤四:检查开关能否正确藏于部件中的同时,试看部件能否正确拼合2. LED 灯连接步骤一:把两条电线分别接上 LED 的正极与负极 (通常长为正,短为负,但不是定律,所以最好测试一下)步骤二:用胶纸把电线包好,以免电线短路 (用甚么胶纸也没所谓,反正只有3V 电压)注:如用在潮湿的情况下,为了安全起见,请用电工胶布3. 放置 LED 灯枪头选用细头的 LED 灯制作步骤一:剪去枪头的接位及打通其位置步骤二:由于 LED 灯头尾部较阔,而部件又没有那么宽阔,所以要在部件中刻出一个凹槽方可把灯藏好注:要如何把灯藏好要看部件本身的空间,所以没有定律,大家随机应变吧!枪中描准器的空间较大所以会选用大头的 LED 灯制作步骤一:一样的做法,剪去前头接位及打通其位置步骤二:把 LED 灯脚屈曲成一个可以固定在部件的形状,注意一点,正、负极要分开, 否则会短路步骤三:把电线度好位置,在中间剪出胶囊以接驳之用注:如经验少而未能剪出中间的接位(因为较易剪断),大可以用两条电线分开连接步骤四:接好电线,先测试一下有否把两支 LED 的正负极接错 (如接错应该细头果支不会着)4. 选择放置电池的位置要选择一个适当的位置并不容易,因为空间不太多,此次选用了较细尺寸的电池 (CR1220) 即 PG Zeta高达头用的那种.步骤一:一如以往,把没用的地方通通剪去,因部件的情况而选择位置吧步骤二:当然要试试能否把电池放进那空间5. 制作电池盒由于市面上可买到的电池盒尺寸都相对巨大,所以我们要度身订做制作使用的材料是一般模型店买到的模型胶板步骤一:把胶板剪裁出比电池大的尺寸,以及剪出多条胶条作准备之用步骤二:没有精确的量度工具,所以起来看看高度是否合适步骤三:用模型胶水贴着胶条砌成一个凹字,再把面版贴上,制作出图中间的形状 (把多余的切去)步骤四:在上方及下方分别开一个洞,作放置铁片之用这次采用的铁片原料,是一般买袜子时的扣,这铁片相当好用,易屈曲之余又不易断裂步骤五:把铁片屈曲成 Z 形,方便放进先前准备的位置步骤六:把前后两方都分别制成图中形状,注:因为这种电池的负极在上方而正极是可以接在下方或左右两边,但放在左右两边有机会接触到负极,所以建议放在下方6. 接上电池盒步骤一:把电池盒放在预先安排好的位置,尺寸刚刚好!...... (其实系制作电池盒时己经度好尺寸)步骤二:接好电线,先把 LED 果边的线接好 (把负极接在电池盒的负极位)注:其实把 LED 果边的正极接在电池盒的正极亦可,只要不是把正极接去负极即可步骤三:把电池盒的正极驳在开关制的其中一条电线上即可,因为开关没有正负极之分步骤四:老生常谈,接好就测试下吧!步骤五:把开关的电线扭成 S 形,因为枪柄是可动的,S 形可以提供足够的弹性,当然要看部件空间而定步骤六:把枪合拼好,再试试枪柄活动时会否令到电路接触不良,如有的话当然是作出修正7.. 制作电池盒盖相信大家都己有一定模型经验,制作一个适合的电池盒盖吧
发表评论