Redis Note(二)redis其余常见结构

(二)redis其余常见结构

A. bitmaps

  • 概述:本身非一种数据结构,本质就是字符串。类似数组,仅可设置0或1的value。
  • 主要操作
    1. 设置值 & 获取
    - 基础设置:setbit key offset value,例如需要统计某网站某天的用户访问情况,则使用setbit unique:users:2022-08-09 0 1 ,表示2022年8月9日uid为0的用户访问了该网站;同理,若setbit unique:users:2022-08-09 99 1则表示uid为99的用户访问了该网站。默认情况下,value都为0。
    - 基础获取值:getbit key offset,若沿用上方案例,offset=88即为查看uid为88的用户在当日有无访问该网站,0表示未访问,1则是曾于今日访问过。
    - 范围获取统计:bitcount key [start end],不填写offset则默认全域范围内value=1的offset有多少个。
    2. bitmap间操作运算
    - 交集:bitop and destkey key [key...],destkey表示操作后新产生的bitmap的名称,继续网站访问案例,获取8月8和8月9两天都访问的用户数量,则进行两步操作:bitop and unique:users:0808+0809 unique:users:2022-08-09 unique:users:2022-08-08 & bitcount unique:users:0808+0809获取最终结果
    - 并集:bitop or destkey key [key...],可以用统计两天内至少访问一次该网站的用户数量。
    - 非:bitop not destkey key [key...]
    - 异或:bitop xor destkey key [key...]
  • 主要功能:redis中的布隆过滤器本质就是基于这个结构的,利用多组hash function,在不同offset下将value从0改成1。

B. HyperLogLog

  • 概述:类似bitmaps其本质也是字符串,利用基数算法实现极小内存空间下完成独立总数的统计,但存在一定误差率,官方统计约为0.81%

  • 主要操作

         1. 添加:```pfadd key element [element...]```,添加成功返回1。例如```pfadd 2022-08-09:unique:ids "uuid-1" "uuid-2" "uuid-3"```。
         2. 计算:```pfcount key [key...]```,计算上方***2022-08-09:unique:ids***的数量,则使用```pfcount 2022-08-09:unique:ids```,得到结果为3。注意,**若pfadd重复的element,在使用pfcount时会自动去重**,实现独立总数统计的效果。
         3. 合并:```pfmerge destkey sourcekey [sourcekey...]```,使用```pfmerge 0808+0809:unique:ids 2022-08-09:unique:ids 2022-08-08:unique:ids```获取两天的统计量,再用```pfcount 0808+0809:unique:ids```获取最终结果。
    
  • 主要功能:一般用于收集ip,email或id等,请参考下方实际案例

    • 若要统计pv,可用redis的incr或incrby实现

    • 但是统计uv的话需要筛选掉pv中重复的uid,可利用mysql的count(distinct user_id)实现,或者redis的set,hash,bitmaps的结构实现;

    • 然而上方的方法效率不好,且存储空间偏大,此时HyperLogLog的优势就出现了,它本身无法取出元素的值,只统计数量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.当键为字符串类型的时候,如果该键值对设置了过期时间,此时再对该键进行set操作,那么将会覆盖已有的键值对,并且...
    奔跑的Robi阅读 1,886评论 0 0
  • 一、简介 本节将按照单个键、遍历键、数据库管理三个维度对一些通用命令进行介绍。 二、单个键管理 针对单个键的命令,...
    四月不见阅读 4,125评论 0 1
  • 基本数据类型 string hash list set zset 数据迁移方法 move(基本废除) dump+r...
    小a草阅读 3,418评论 0 0
  • redis 常用命令 del key:删除key。 dump key:序列化一个key,返回被序列化的值。 exi...
    dev_winner阅读 1,495评论 0 1
  • redis关注点: 1、redis命令:Redis 命令参考 — Redis 命令参考 字符串:SET key v...
    zero_93a5阅读 1,477评论 0 0

友情链接更多精彩内容