Radis 三种特殊数据类型…
geospatial
1 2 3 4 5 6 7 8
| geoadd geopos geodist georadius 可以加参数 withdist 显示距离, withcoord 显示经纬度, count x 限制个数 georadiusbymember 找出指定元素周围的其他元素 geohash 返回11个字符串的geohash字符串 geo底层的实现原理就是zset!我们可以通过zset命令来操作geo
|
Hyperloglog
1 2 3 4 5 6 7 8 9 10 11
| Redis Hyperloglog 基数统计的算法! 优点:占用的内存固定,2^64不同的元素基数,只需要12KB内存!如果要从内存角度来比较的话Hyperloglog首选!
网页UV(一个人访问一个网站多次,但是还是算作一个人!) 传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为标准判断! 这个方式如果保存大量的用户id,就会比较麻烦! 我们的目的是为了计数,而不是保存用户id; 0.81误错率! 统计UV任务,可以忽略不计的!
pfcount 统计元素的基数数量 pfmearge mykey3 mykey mykey2 如果允许容错,使用Hyperloglog;如果不允许容错,就使用set或者自己的数据类型即可
|
Bitmap
原理
8bit = 1b = 0.001kb
bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。
一个bit的值,或者是0,或者是1;也就是说一个bit能存储的最多信息是2。
优势
- 基于最小的单位bit进行存储,所以非常省空间。
- 设置时候时间复杂度O(1)、读取时候时间复杂度O(n),操作是非常快的。
- 二进制数据的存储,进行相关计算的时候非常快。
- 方便扩容
限制
redis中bit映射被限制在512MB之内,所以最大是2^32位。建议每个key的位数都控制下,因为读取时候时间复杂度O(n),越大的串读的时间花销越多。
案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 统计用户信息,活跃 不活跃! 登录 未登录! 打卡 未打卡! 两个状态的,都可以使用Bitmaps Bitmaps 位图,数据结构! 都是操作二进制来进行记录,就只有0和1两个状态! 365天=365bit 1字节=8比特 46比特左右!
使用bitmap来记录 周一到周日的打卡! 127.0.0.1:6379> setbit sign 0 1 (integer) 0 127.0.0.1:6379> setbit sign 1 0 (integer) 0 127.0.0.1:6379> setbit sign 2 0 (integer) 0 127.0.0.1:6379> setbit sign 3 1 (integer) 0 127.0.0.1:6379> setbit sign 4 1 (integer) 0 127.0.0.1:6379> setbit sign 5 0 (integer) 0 127.0.0.1:6379> setbit sign 6 0 (integer) 0
|
查看某一天是否打卡!
1 2 3 4
| 127.0.0.1:6379> getbit sign 3 (integer) 1 127.0.0.1:6379> getbit sign 6 (integer) 0
|
统计操作,统计打卡的天数!
1 2
| 127.0.0.1:6379> bitcount sign (integer) 3
|