课程学习地址:

https://www.bilibili.com/video/BV1S54y1R7SB?p=23

中间手册地址:

http://www.redis.cn/

一. 地理空间(geospatial) 索引半径查询

二.Hyperloglog


什么是基数

A{1,3,5,7,8,7}

B{1,3,4,7,8}

基数(不重复的元素)=5,可以接受误差!

简介

Redis2.8.9版本就更新了Heperloglog数据结构!

Redis Hyperloglog 基数统计的算法

优点:占用内在是固定的,2^64不同的元素的技术,只需要12kb内在!如果要从内在的角度来比较的话Hyperloglog首先!

页面的UV(一个人访问网站多次,但还是算作一个人!)

传统的方式,set保存用户的id,然后就可以统计set中元素数据作为标准判断!

Heperloglog 0.81%错误率!统计UV任务,可以忽略不计的!

测试使用

127.0.0.1:6379> pfadd mykey a a b c d e f g h i  #添加第一组基数数量
(integer) 1
127.0.0.1:6379> pfcount mykey #统计第一组基数数量,会自动去重
(integer) 9
127.0.0.1:6379> pfadd mykey j #继续添加
(integer) 1
127.0.0.1:6379> pfadd mykey2 i j z x c v b n m
(integer) 1
127.0.0.1:6379> pfcount mykey2
(integer) 9
127.0.0.1:6379> pfmerge mykey3 mykey mykey2 #合并第二组两个基数集
OK
127.0.0.1:6379> pfcount mykey3 #统计基数
(integer) 15
127.0.0.1:6379> pfcount mykey #统计基数
(integer) 10
127.0.0.1:6379> pfcount mykey2 #统计基数
(integer) 9

统计基数,如果允许容错,那么一定可以使用Hyperloglog!

如果不允许容错,就使用set或者自己的数据类型即可!


三. Bitmaps

位存储

统计用户信息,活跃,不活跃!登录未登录!打卡,365打卡!两个状态的,都 可以使用Bitmaps!

Bitmaps位图,数据结构都是操作二进制位来进行记录,就只有0和1两个状!

365天 = 365bit 1字节 = 8bit 46个字节左右!

测试

使用bitmap来记录,周一到周日的打卡!(1代表已经签到了,0代码没有签到)!

周一:1 周二:0 周三:0 周四:1 ......

127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0

查看某一天是否有打卡!

127.0.0.1:6379> getbit sign 3 #周四打卡了
(integer) 1
127.0.0.1:6379> getbit sign 5 #周六没有打卡
(integer) 0

统计操作,统计打卡的天数!

127.0.0.1:6379> bitcount sign #统计这周的打卡记录,就可以看到是否有全勤
(integer) 5

02 redis 三种特殊的数据类型的更多相关文章

  1. 10、Redis三种特殊的数据类型

    一.Geospatail地理位置 1.Geospatail的应用 朋友的位置,附近的人,打车距离 2.相关命令 1.geoadd:增加某个地理位置的坐标(可批量添加). 语法: GEOADD key ...

  2. cocos2dx中的三种基本的数据类型

    cocos2dx中提供了三种基本的数据类型:CCString(字符串),CCArray(数组),CCDictionary(数据字典(哈希的功能)) 2.CCString的用法 class  CCStr ...

  3. 面试官:介绍一下 Redis 三种集群模式

    小码今天去面试. 面试官:给我介绍一下Redis集群, 小码:啊,平时开发用的都是单机Redis,没怎么用过集群了. 面试官:好的,出门右转不谢. 小码内心困惑:在小公司业务量也不大,单机的 Redi ...

  4. Jedis连接Redis三种模式

    这里说的三种工作模式是指: 1.单机模式 2.分片模式 3.集群模式(since 3.0) 说明图详见以下: 使用单机模式连接: private String addr="192.168.1 ...

  5. python实现redis三种cas事务操作

    cas全称是compare and set,是一种典型的事务操作. 简单的说,事务就是为了存取数据库中同一数据时不破坏操作的隔离性和原子性,从而保证数据的一致性. 一般数据库,比如MySql是如何保证 ...

  6. Redis三种集群模式介绍

    三种集群模式 redis有三种集群模式,其中主从是最常见的模式. Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的.哨兵顾名思义,就是用来监控的,主要作用就是 ...

  7. Redis三种模式——主从复制,哨兵模式,集群

    一.Redis主从复制作用 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复:实际上是一种服务的冗余. 负 ...

  8. 五分钟学会悲观乐观锁-java vs mysql vs redis三种实现

    1 悲观锁乐观锁简介 乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果 ...

  9. redis三种模式对比

    模式类型 主从模式(redis2.8版本之前的模式).哨兵sentinel模式(redis2.8及之后的模式).redis cluster模式(redis3.0版本之后) 主从模式原理 同Mysql主 ...

  10. redis三种集群策略

    主从复制 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库 从数据库一般都是只读的,并且接收主数据库同步过来的数据 一个master可以拥有多个slave,但是一个slav ...

随机推荐

  1. 探索Django REST框架构建强大的API

    本文分享自华为云社区<探索Django REST框架构建强大的API>,作者:柠檬味拥抱. 在当今的Web开发中,构建强大的API已经成为了不可或缺的一部分.而在Python领域,Djan ...

  2. Scala 传名参数和传值参数

    1 package com.atguigu.chapter04 2 3 object ControlAbstraction { 4 def main(args: Array[String]): Uni ...

  3. Scala编译原理

    1 package com.atguigu.chapter01; 2 /** 3 * 4 */ 5 //main 方法名 6 //小括号表示参数列表 7 // 参数声明方式: java -> 类 ...

  4. Python---json数据格式详解

    什么是JSON JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. 那么,JSON到底是什么? JSON就是一串字符串 ...

  5. #决策单调性dp,分治#LOJ 6039「雅礼集训 2017 Day5」珠宝

    题目传送门 分析 观察到这个0/1背包中单个物品的体积不超过300,考虑分体积考虑. 设 \(dp[i]\) 表示容量大小为 \(i\) 的背包能获得的最大价值, \(dp[i]=\max\{dp[i ...

  6. #根号分治#洛谷 3645 [APIO2015]雅加达的摩天楼

    题目传送门 分析 设 \(d[i][j]\) 表示 所处位置为 \(i\),跳跃能力为 \(j\) 的步数, 若 \(j\leq \sqrt{n}\),这样的状态最多有 \(n\sqrt{n}\) 个 ...

  7. #交互#CF1370F2 The Hidden Pair (Hard Version)

    题目 分析 考虑询问所有点可以知道两个标记点路径上的一个点, 以该点为根建树,可以二分出离该点较远的一个标记点, 再用这个标记点一次询问推出另一个,最多11次询问 代码 #include <cs ...

  8. #分治#洛谷 5502 [JSOI2015]最大公约数

    题目 分析 又是一道思维题,考虑用分治,选取左边或右边的基准尽量扩展长度,时间复杂度\(O(nlog_2n)\) 代码 #include <cstdio> #include <cct ...

  9. 带你玩转OpenHarmony AI:打造智能语音子系统

    简介 AI时代,智者当先,判断一个终端设备是否智能,语音能力是必不可缺的.智能家居.智慧厨房.智能汽车等等,一切衣食住行都在往智能方向发展,那我们该如何在OpenAtom OpenHarmony(简称 ...

  10. C++ 用户输入与数据类型详解:建立基本计算器及变量类型

    C++ 用户输入 你已经学习了 cout 用于输出(打印)值.现在我们将使用 cin 来获取用户输入. cin 是一个预定义变量,它使用提取运算符(>>)从键盘读取数据. 在下面的示例中, ...