一,GEO类型
Redis 3.2中增加了对GEO类型的支持。GEO , Geographic ,地理信息的缩写。 该类型,就是元素的2维坐标,在地图上就是经纬度。redis基于该类型,提供了经纬 度设置,查询,范围查询,距离查询,经纬度Hash等常见操作。
geoadd命令:添加元素 如:geoadd key 经度 纬度 城市名称;
127.0.0.1:6379> GEOADD city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> GEOADD city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing
(integer) 3
127.0.0.1:6379>
geopos 命令:根据城市名获取经纬度
127.0.0.1:6379> geopos city chongqing
1) 1) "106.49999767541885376"
2) "29.52999957900659211"
geodist 命令:根据key和城市名获取两个城市之间的距离;距离单位有 m:米; km千米; mi:英里;ft英尺;
127.0.0.1:6379> geodist city shanghai chongqing km
"1447.6737"
georadius命令:根据经纬度和半径范围得到城市
127.0.0.1:6379> GEORADIUS city 110 30 1000 km
1) "chongqing"
2) "shengzhen"
二,HyperLogLog数据类型
在工作当中,我们经常会遇到与统计相关的功能需求,比如统计网站PV (PageView页面访问量),可以使用Redis的incrs incrby轻松实现。
但像UV ( UniqueVisitor,独立访客)、独立IP数、搜索记录数等需要去重和 计数的问题如何解决?这种求集合中不重复元素个数的问题称为基数问题。
解决基数问题有很多种方案:
(1)数据存储在MySQL表中,使用distinct count计算不重复个数.
(2)使用Redis提供的hash, set、bitmaps等数据结构来处理。
以上的方案结果精确,但随着数据不断增加,导致占用空间越来越大,对于非 常大的数据集是不切实际的。
能否能够降低一定的精度来平衡存储空间? Redis推出了 HyperLogLog。
Redis HyperLogLog是用来做基数统计叫算法,HyperLogLog的优点是,在输 入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
在Redis里面,每个HyperLogLog键只需要花费12 KB内存,就可以计算接 近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成 鲜明对比。
但是,因为HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素 本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。
什么是基数?比如数据集{ 1, 3, 5, 7, 5, 7, 8) ,那么这个数据集的基数集为{ 1, 3, 5 ,7, 8} , 基数(不重复元素)。基数估计就是在误差可接受的范围内,快速计算基数。
pfdd命令:添加指定元素 如:pfdd kye value1 value2 value3 …(元素可以重复)
pfcount命令:根据key统计基数的数量;
统计单个key:
127.0.0.1:6379> pfadd k1 java mysql redis java nginx
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> pfcount k1
(integer) 4
127.0.0.1:6379>
127.0.0.1:6379>
统计多个key:
127.0.0.1:6379> pfadd k1 java mysql redis java nginx
(integer) 1
127.0.0.1:6379> pfadd k2 v1 v2 v3 v2
(integer) 1
127.0.0.1:6379> pfcount k1 k2
(integer) 7
127.0.0.1:6379>
pfmerge命令:将一个或者多个HLL合并后储存在另个HLL中,
127.0.0.1:6379> pfadd k1 java mysql redis java nginx
(integer) 1
127.0.0.1:6379> pfadd k2 v1 v2 v3 v2
(integer) 1
127.0.0.1:6379> pfcount k1 k2
(integer) 7
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379>
127.0.0.1:6379> PFMERGE k3 k1 k2
OK
127.0.0.1:6379> PFCOUNT k3
(integer) 7
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379>
三,Bigmaps数据类型

setbit命令:添加,设置bitmaps中某个偏移量的值(偏移量可以理解为下标从0开始)如:setbit key 偏移量(只能是数字) 值(只能是0或1)


getbit命令:根据key和偏移量得到值,返回结果是0或1 如:getbit key 偏移量
bitcount命令:统计字符串被设置为1的bit数。一般情况下,给定的整个字符串都会被进行计数,通 过指定额外的start或end参数,可以让计数只在特定的位上进行。start和end参数 的设置,都可以使用负数值:比如-1表示最后一个立,而-2表示倒数第二个位, start. end是指bit组的字节的下标数,二者皆包含。

bitop命令:两个bitmaps的复合操作

本文介绍了Redis的三种新数据类型:GEO类型用于处理地理位置信息,提供添加、查询和范围查找等功能;HyperLogLog是用于基数统计的高效算法,能在较小空间内估算大量数据的不重复元素数量;Bigmaps则涉及位图操作,支持设置、获取和统计比特位。这些特性极大地丰富了Redis的数据处理能力。

被折叠的 条评论
为什么被折叠?



