第05-02节:Redis的十大数据类型

news/2024/10/18 18:31:10/

我的后端学习大纲

我的Redis学习大纲


在这里插入图片描述


6、地理空间(GEO)类型简介:

6.1.什么是GEO:

  • 1.GEO主要是用于地理位置信息,并对存储的信息进行操作,包括:
    • 添加地理位置的坐标
    • 获取地理位置的坐标
    • 计算两个位置之间的距离
    • 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合
  • 2.SQL进行地理位置查询的缺点:select taxi from position where x0-r < x < x0 + r and y0-r < y < y0+r
    • 查询性能问题,如果并发高,数据量大这种查询是要搞垮数据库
    • 这个查询的是一个矩形访问,而不是以我为中心r公里为半径的圆形访问。
    • 精准度的问题,我们知道地球不是平面坐标系,而是一个圆球,这种矩形计算在长距离计算时会有很大误差

6.2.命令:

在这里插入图片描述

如何获取某个地址的经纬度:

  • 百度地图可以获取
    在这里插入图片描述

a.GEOADD添加经纬度坐标:

在这里插入图片描述
在这里插入图片描述

  • 1.命令:GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫" 116.024067 40.362639 "长城"
  • 2.当有中文乱码的时候,需要加--raw参数,这是客户端的原因:
    在这里插入图片描述

b.GEOPOS返回经纬度:

在这里插入图片描述

d.GEOHAS:返回坐标的geohash表示:

a.命令

在这里插入图片描述
在这里插入图片描述

b.说明:

  • 1.geohash算法生成的base32编码值,3维变2维再变1维
    在这里插入图片描述

c.GEODIST:两个位置之间的距离:

在这里插入图片描述
在这里插入图片描述

  • 命令:GEODIST city 天安门 故宫 km

f.GEORADIUS:

  • 1.georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素
  • GEORADIUS city 116.418017 39.914402 10 km withdist withcoord count 10 withhash desc
  • GEORADIUS city 116.418017 39.914402 10 km withdist withcoord withhash count 10 desc

说明:

  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致
  • WITHCOORD: 将位置元素的经度和维度也一并返回
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大
  • COUNT 限定返回的记录数。

案例: 当前位置(116.418017 39.914402)
在这里插入图片描述

g.GEORADIUSBYMEMBER:

在这里插入图片描述
在这里插入图片描述


7、基数统计(HyperLogLog)类型:

7.1.什么是基数统计:

  • 1.HyperLogLog主要是用于做基数(不重复的数字或者ip,重点是不重复,这就是基数)统计的算法,HyperLogLog的优点是:在输入元素的数量或者体积非常非常大的时候,计算基数所需的空间总是固定且很小的
  • 2.在redis中,每个HyperLogLog键只需要花费12KB内存,就可以计算2的64次方的不同元素的基数,这和基数计算时,元素越多内存消耗就越多的集合形成鲜明对比
  • 3.但因为HyperLogLog只会根据输入元素来计算基数,而不会存储输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素

7.2.基本命令:

在这里插入图片描述
在这里插入图片描述

7.3.应用场景:

在这里插入图片描述


8、位图(bitmap)类型:

a.什么是位图:

  • 1.位图(bitmap)是由0和1状态表现的二进制位的bit数组
    在这里插入图片描述

说明:

  • 用String类型作为底层数据结构实现的一种统计二值状态的数据类型
  • 位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。
  • Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)

c.基本命令:

在这里插入图片描述

setbit命令:Bitmap的偏移量是从0开始算的

在这里插入图片描述

getbit命令

在这里插入图片描述

strlen命令:统计字节占用多少,不是统计字符串的长度,而是占据了几个字节。超过8位后自己按照8位一组byte进行扩容

在这里插入图片描述

bitcount全部键里面含有1的有多少个

在这里插入图片描述

bitpop命令:假设统计连续2天都签到的用户

  • 1.加入某个网站或者系统,它的用户有1000W,做个用户id和位置的映射
    • 比如0号位对应用户id:uid-092iok-lkj
    • 比如1号位对应用户id:uid-7388c-xxx
      在这里插入图片描述
  • 2.登录登记:
    在这里插入图片描述

可以看到连续2天登录的人有:2个


setbit和getbit案例说明:

  • 1.案例:登记某个人在2021年6月的每一天签到情况
    在这里插入图片描述
  • 2.查询某个人在2021年6月份签到的总天数:
    在这里插入图片描述

b.应用场景:

主要用于状态的统计,Y、N,类似AtomicBoolean

  • 可以用于定义今天是否签到、是否打卡、是否有相同的爱好、电影广告是否被点击过等场景

9、位域(bitfield)位域(了解):

a.bitfield是什么:

在这里插入图片描述

b.bitfield可以做什么:

在这里插入图片描述

  • 位域修改
  • 溢出控制

c.基本语法:

  • BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]
    在这里插入图片描述

10、流(Stream)类型:

10.1.Stream简介:

在这里插入图片描述

10.2.基本命令理论:

  • 1.队列相关指令:
    在这里插入图片描述
  • 2.消费组相关指令:
    在这里插入图片描述
  • 3.四个特殊符号:
    在这里插入图片描述

10.3.基本命令实操:Redis流实例演示:

a.对列相关指令:

b.消费组相关指令:

c.XINFO:

在这里插入图片描述


http://www.ppmy.cn/news/1540054.html

相关文章

C语言 | Leetcode C语言题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; class Solution { public:int findComplement(int num) {int pos;for (int i 30; i > 0; i--) {if (num & (1 << i)) {pos i;break;}}return (((1LL << (pos 1)) - 1) ^ (num));} };

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析

1. 什么是缓存穿透&#xff0c;怎么解决&#xff1f; 缓存穿透是指用户请求的数据在缓存中不存在即没有命中&#xff0c;同时在数据库中也不存在&#xff0c;导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据&#xff0c;会导致短时…

docker+mysql创建用户名密码_docker里面的mysql 更换密码

进入mysql容器 操作vi etc/mysql/my.cnf 默认是不安装vi编辑器的&#xff0c;下面安装vi 更新安装包 apt-get update 安装vim 执行这条语句 apt-get install vim 到修改docker容器里面的mysql数据库密码了 启动mysql容器 docker exec -it mysql /bin/bash 编辑配置文件 我这里是…

设计模式03-装饰模式(Java)

4.4 装饰模式 1.模式定义 不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 2.模式结构 抽象构件角色 &#xff1a;定义一个抽象接口以规范准备接收附加责任的对象。客户端可以方便调用装饰类和被装饰类…

链式法则 反向传播

“反向传播 x” 和 “损失函数”&#xff1a; 反向传播是一种用于训练神经网络的算法&#xff0c;通过计算损失函数对模型参数的梯度&#xff0c;然后根据这些梯度更新参数以最小化损失函数。损失函数用于衡量模型预测值与真实值之间的差异。 “w,b” 和 “y wx b”&#xff…

基于SSM党务政务服务热线管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;部门管理&#xff0c;办事信息管理&#xff0c;信息记录管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;部门&#xff0c;信息…

PL/SQL Developer15和Oracle Instant Client安装配置详细图文教程

一、下载介质 1、Oracle Instant Client Oracle Instant Client Downloads | Oracle 中国 2、PL/SQL DEVELOPER PL/SQL Developer - Allround Automations Free trial - Allround Automations 二、安装介质。 1、安装plsqldev1504x64.msi。 一路默认下一步。 选择输入许可信…

c/c++中void定义的空类型指针(void* p)要怎么使用(强制类型转换)以及使用场景(函数指针)

我们先看看下面的代码&#xff0c;p是一个void类型的指针&#xff0c;ch是一个char类型的变量&#xff0c;当我们用p来保存ch的地址时&#xff0c;我们却无法通过*p来对ch的值进行访问&#xff0c;因为char会自动转化为void*类型的指针&#xff0c;也就是空类型指针&#xff0c…