赞
踩
目录
现代计算机用二进制作为信息的基本单位,1个字节等于8位,合理的使用操作位能够有效的提高内存使用率和开发效率。
Redis提供了 Bitmaps这个“数据类型”可以实现对位的操作:
可用于标记独立用户是否访问过网站,有访问的置为1,没有的为0
设置Bitmaps中某个偏移量的值(0或者1)
例子:
用偏移量作为用户id,假设现在有uid=1.3.9的用户访问网站,那么将该位置的值置为1
users:20220905 可以表示这一天内访问网站的用户
注:一般用户的id都是一大串随机数字,如果偏移量非常大的话势必会造成一定的内存浪费,那么可以先减去一个基数使得偏移量变小以节省内存空间
ps: 感觉有点像c++中的一种数据结构--bitset 有兴趣的小伙伴可以去查一下。
获取第offset的值
例子:
统计字符串被设置为1的 bit 数。
start 和 end 参数的设置,可以使用负数值:比如 -1 表示最后一个位,而-2表示倒数第二个位, start、end 是指bit 组的字节的下标数,二者皆包含。
例子:
bitop 是一个复合操作,它可以做多个Bitmaps的and(交集)、or(并集)、not(非)、xor(异或) 操作并将结果保存在destkey中。
例子:
9月5号
9月4号
合并
HyperLogLog可用于解决与统计相关的功能需求,比如统计网站的页面访问量,虽然可以使用Redis的incr、incrby轻松实现。但像 独立访客、独立IP数、搜索记录数等需要去重和计数的问题如何解决?这种求集合中不重复元素个数的问题称为基数问题。"
解决基数问题有很多种方案:
以上的方案结果精确,但随着数据不断增加,导致占用空间越来越大,对于非常大的数据集是不切实际的。
Redis推出了HyperLogLog,这种数据结构能够降低一定的精度来平衡存储空间。
Redis HyperLogLog是用来做基数统计的算法,HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。
在Redis里面,每个HyperLogLog 键只需要花费12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是,因为 HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。这也是其占用内存少的原因。
将元素添加到指定的HyperLogLog数据结构中,如果执行命令后words估计的近似基数发生变化,则返回1,否则返回0.
例子:
也可一次插入多个数据
计算words的近似基数
例子:
即将一个或多个hyperLogLog数据结构合并后的结果存放到另一个hyperLogLog中
例子:
创建两个hyperLogLog集合,words和word
合并后集合的近似基数为合并前两个集合的基数之和
Redis 3.2 中增加了对 GEO 类型的支持。GEO,Geographic,地理信息的缩写。该类型,就是元素的2维坐标,在地图上就是经纬度。redis 基于该类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度 Hash等常见操作。
例子:
数据有效范围:
经度从 -180度到180度。纬度从-8505112878度到85.05112878 度。
当坐标位置超出指定范围时,该命令将会返回一个错误。已经添加的数据,是无法再次往里面添加的。
获取指定地区的坐标值
例子:
获取两个位置之间的直线距离
可选参数:
如果用户没有显式地指定单位参数,那么geodist默认使用米作为单位。
例子:
以给定的经纬度为中心,找出某一半径内的元素
longitude:经度 latitude:纬度 radius:半径 可选参数:单位
例子:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。