redis的小功能 bitmaps 发布订阅,HyperLogLog GEO LUA

慢查询功能:
慢查询只统计统计客户所发送命令的执行时间。

慢查询日志是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值得时候,就将这条命令的信息(发生时间,耗时,命令详细时间)记录下来。

而这个预设阀值redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决这两个问题  slowlog-log-slower-than(单位是微妙 默认是10000)而slowlog-max-len配置来记录慢查询日志最多存储多少条,

实际上redis使用了一个列表来存储慢查询日志。淘汰策略以队列方式,先进入先淘汰。

//获取日志所有记录

slowlog get

//获取日志长度

slowlog len

//重置:
slowlog reset

 

Bitmaps:一个位的数组,数组中只能存放0或者1,应用场景适用于检测一个用户是否访问过一个网站 bitmaps的offset 可以代表用户id offset所对应的值0,1代表是否访问,0代表位访问,1代表访问

向bitmaps中添加数据 offset代表数组偏移量。

setbit key offset value

获取值:
getbit key offset

setbit unique:users:2020-10-22 0 1  代表在2020-10-22这一天,id为0的用户访问了这个网站

获取bitmaps指定范围值为1的个数:

bitcount key [start    end]注意这里的start与end 都是以字节为单位的,而bitmaps的操作单位是一位。

bitmaps间的操作:
bitop operation destkey key1 key2

operation and or not xor(异或)

bitop and destkey users:2020-10-22  users:2020-10-21 相当于求在21号 22号都访问过该网站的用户个数

计算bitmaps中第一个值为targetbit (0,1)的偏移量

bitpos key targetbit [start] [end]

bitpos unique:users:2020-10-21 1 1 2  相当于求在2020-10-21这一天,在1到2字节 首次使得bitmaps值为1的偏移量

HyperLogLog:并不是一种新的数据结构,而是一种基数算法,通过HyperLogLog可以利用极小的内存空间完成独立总数的统计,数据集可以是ip,email ,id等

HyperLogLog提供了三种命令,pfadd pfcount pfmerge

1:添加

pfadd key element element2....

2:计算一个或者多个独立的用户数

pfcount key [key ..]

3:合并

pfmerge destkey sourcekey sourcekey2 统计两个key的并集进行计数

hyperloglog内存占用量非常小,但是存在错误率,开发者在进行数据结构选型时需要注意这两点:

如果只是为了计算独立总数,不需要获取单条数据,可以容忍一定的误差率

 

发布/订阅

publish channel message

订阅消息:支持多订阅
subscribe channel channel1 channel2

模式订阅:
psubscribe pattern

模式订取消:
punsubscribe pattern

取消订阅:支持多取消
unsubscribe channel channel1

查询订阅(查看活跃的频道):所谓活跃的频道是指当前频道至少有一个订阅者,可以支持模式(正则匹配所需频道规则)

例如:pubsub channels channel:*r*   查看channel:以r开头或者包含r的活跃的频道

pubsub channels [pattern]

pubsub channels

查看频道订阅数:
pubsub  numsub channel

查看模式订阅数:即查看有几个客户端通过模式来订阅
pubsub numpat

 

GEO:
redis 3.2提供了GEO(地理信息定位)支持存储地理位置信息用来实现诸如附近位置

增加地理位置信息:支持多添加
geoadd key longtitude(经度)latitude(纬度)member [longitude latitude member]

更新也可以使用add,只是这时会返回0

获取地理位置信息:

geopos key member

获取两个地理位置的距离:
geodist key member1 member2 [unit]

unit为单位:m km mi(英里)ft(尺)

获取指定位置范围内的地理位置信息:
georadius key longitude radiusm km|ft|mi

georadiusbymember key member radiusm km|ft|mi

两个命令作用都是一样的

georadiusbymember  cities:locations  beijing 150  rm 返回以北京为中心,半径为150km范围内的成员

获取geohash

geohaah key member    redis使用geohash将二维经度转换为1纬字符串

geohash的字符串越长,表示的位置越精确,当geohash长度为9时,精度在两米左右

两个字符串越相似,它们之间的距离越近,geohash编码和经纬度之间是可以相互转换的

GEO没有提供删除成员的命令,但是因为GEO的底层实现是zset,所以可以借用zrem命令实现对地理位置信息的删除

 

缺少lua语言脚本的学习

 

posted @ 2020-10-27 17:28  xzwcomeon  阅读(143)  评论(0编辑  收藏  举报