Redis 三种特殊的数据类型
geospatial 地理位置
添加不同城市的地理位置信息
geoadd china:city 116.408 39.901 beijing
geoadd china:city 121.445 31.213 shanghai
geoadd china:city 120.343 36.088 qingdao
geoadd china:city 104.071 30.67 chengdu
geoadd china:city 108.969 34.285 xian
计算距离等相关信息
geopos china:city beijing # 获得北京的经度和维度
geodist china:city beijing shanghai km # 北京和上海的距离
georadius china:city 100 30 500 km # 距离某个地理位置 500km 内的坐标
georadius china:city 100 30 5000 km count 2 # 对结果进行限定,最多只能查出来两个
georadiusbymember china:city beijing 5000 km count 2 # 距离北京5000km的城市,限定两个
Hyperloglog
hyper 亢奋的;使用做基数统计。
举个最简单的例子,如果你要对某个网站访问人数,进行统计,那么如果一个人访问了多次,那么他算是一次访问。
正常情况下,我们可以使用 set
来处理这种情况,因为 set
本身如果重复的话,那么就会自动覆盖,但是这样的话,一般占用的空间比较大,使用 Hyperloglog
只需要费 12k 的内存,但是会有 0.8%的错误率
pfadd pfkey1 1 2 3 4 5 6 # 往 pfkey1 里添加值
pfadd pfkey2 5 6 7 8 9 10 # 往 pfkey2 里添加值
pfcount pfkey1 # 读取 pfkey1 的总数
pfmerge pfkey3 pfkey1 pfkey2 #将 pfkey1 和 pfkey2 合并为新的 pfkey3
pfcount pfkey3 # 统计 pfkey3的总数
Bitmaps
他是用于位存储,所以一般用来存储两种状态的,就可以使用这会方法,因为位只能存储 0
,1
比如下面是一个人的上班打卡信息,1表示打卡了,0表示没有打卡
setbit bit1 1 1 # 第一天正常上班
setbit bit1 2 1 # 第二天正常上班
setbit bit1 3 0 # 第三天没有来上班
setbit bit1 4 1 # 第四天正常上班
getbit bit1 3 # 查看第三天的状态
bitcount bit1 # 总共有几天是上班的?
# 输出3 ,只有三天上班了。
参考文献
[1] https://www.bilibili.com/video/BV1S54y1R7SB?share_source=copy_web