zoukankan      html  css  js  c++  java
  • 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语言脚本的学习

  • 相关阅读:
    SQL 学习之路 (一)
    简单、易懂、通用的微信号、二维码轮播js
    本地phpstudy 新建站点运行步骤
    react-native 项目环境搭建
    JavaScript与DOM(下)
    JavaScript与DOM(上)
    ThisYes,this!
    编写高质量的JavaScript代码的基本要点
    变量对象(Variable Object)
    JavaScript核心
  • 原文地址:https://www.cnblogs.com/foreverlearnxzw/p/13865383.html
Copyright © 2011-2022 走看看