Redis的三种特殊数据类型

文章目录

  • 一、Redis geospatial 地理位置
  • 二、Redis Hyperloglog 基数统计的算法
  • 三、Redis Bitmaps 位存储(0、1)
  • 总结


一、Redis geospatial 地理位置

  • 1.geoadd:将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。
geoadd china:city 121.472644 31.231706 shanghai
geoadd china:city 120.619585 31.299379 suzhou
geoadd china:city 116.405285 39.904989 beijing
geoadd china:city 113.280637 23.125178 guangzhou 113.26197 23.10379 haizhuqu

往china:city这个key里,添加了5个地方的经纬度:上海、苏州、北京、广州、广州海珠区。

  • 2.geopos:从key里返回所有给定位置元素的位置(经度和纬度)。
geopos china:city suzhou shanghai

返回位置的坐标。返回位置的坐标。

  • 3.geodist:返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。

单位:
- m 表示单位为米(默认)。
- km 表示单位为千米。
- mi 表示单位为英里。
- ft 表示单位为英尺。

geodist china:city suzhou shanghai km

返回两地的距离

  • 4.georadius:以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
georadius china:city 121.49295 31.22337 30 km

我以 上海黄浦区的坐标121.49295 31.22337为中心,寻找30km之内的城市。
再远点,100km之内,还可以找到suzhou,加上withdist显示出距离。

georadius china:city 121.49295 31.22337 100 km withdist

再加上count,只返回我指定的数量。

georadius china:city 121.49295 31.22337 100 km withdist withcoord count 1
  • 5.georadiusbymember:这个命令和 georadius命令一样, 都可以找出位于指定范围内的元素。但是这里不是指定中心点坐标,而是指定以哪个元素为中心点。
georadiusbymember china:city suzhou 100 km withdist

这里以元素suzhou为中心点,找周围100km内的其他元素。

  • 6.geohash:一个或多个位置元素,用hash表示。
geohash china:city suzhou shanghai

返回11个字符的Geohash字符串,代表当前经纬度的字符串,就是换了个形式,将二维的经纬度转化成了一个一维的字符串。如果2个字符串越接近,则2个位置距离也越近

geo的底层原理还是zset,我们可以使用zset命令操作geo,比如移除geo里的城市。

zrem china:city haizhuqu

二、Redis Hyperloglog 基数统计的算法

基数:一个集合中的不重复元素的个数。

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

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

  • 1.PFadd:创建元素
PFadd mykey a b c d e f
  • 2.PFCOUNT:统计key元组元素的基数数量
PFCOUNT mykey
  • 3.PFMERGE:合并两组元组
PFMERGE mykey3 mykey mykey2

在这里插入图片描述
错误率:0.81%,如果允许容错,那么可以选择Hyperloglog。

三、Redis Bitmaps 位存储(0、1)

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

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

  • SETBIT key offset value
    对key存储的字符串,设置或者清除指定偏移量上的位(bit),位的设置或者清除取决于value参数,0/1;当key不存在时,自动生成一个新的字符串。字符串会进行伸展确保value保存在指定的偏移量上。字符串进行伸展时,空白位置以0填充。

    offset 范围:

    0~2^32

    返回值:
    指定偏移量原来存储的位

  • GETBIT key offset
    获取指定偏移量上的位(bit),当offset比字符串长度大,或者key不存在,返回0;
    返回值:
    字符串值指定偏移量上的位(bit)

  • BITCOUNT key [start] [end]
    计算给定字符串中,被设置为1的bit位的数量。start和end参数可以指定查询的范围,可以使用负数值。-1代表最后一个字节,-2代表倒是第二个字节。

    注意:start和end是字节索引,因此每增加1 代表的是增加一个字符,也就是8位,所以位的查询范围必须是8的倍数。
    返回值:
    被设置为1的位的数量


总结

以上就是Redis的三种特殊数据类型,希望对你有所帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能-卷积神经网络(LeNet)

为了能够应用softmax回归和多层感知机,我们首先将每个大小为\(28\times28\)的图像展平为一个784维的固定长度的一维向量,然后用全连接层对其进行处理。 而现在,我们已经掌握了卷积层的处理方法,我们可以在图像中保留空间结构。 同…

Dubbo从入门到上天系列第五篇:Dubbo3与JDK17不兼容问题展示

文章目录 一:JDK 与 Dubbo版本对应问题说明 1:问题1 2:问题2 二:Spring与JDK版本对应关系 1:对应关系详图 2:JDK与Major对应关系图 大神链接:作者有幸结识技术大神孙哥为好友&#xff0c…

[ Linux Busybox ] nandwrite 命令解析

文章目录 相关结构体nandwrite 函数实现nandwrite 实现流程图 文件路径:busybox-1.20.2/miscutils/nandwrite.c 相关结构体 MTD 相关信息结构体 struct mtd_info_user {__u8 type; // MTD 设备类型__u32 flags; // MTD设备属性标志__u32…

基于STM32控制直流电机加减速正反转仿真设计

**单片机设计介绍,基于STM32控制直流电机加减速正反转仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 本设计由STM32F103、L298N电机驱动电路、按键电路组成。通过按键可以控制电机,正转、反转、加…

商越科技:渗透测试保障平台安全,推动线上采购高效运转

商越科技是数字化采购解决方案提供商,在同赛道企业中始终保持前列。商越科技通过自主研发的智能采购中台、SaaS应用及运营服务等为企业搭建专属的互联网采购平台,帮助企业实现采购数字化以及智能化转型,提高工作效率、降低采购成本。 打造数字…

Linux基础开发工具之调试器gdb

文章目录 1.编译成的可调试的debug版本1.1gcc test.c -o testdebug -g1.2readelf -S testdebug | grep -i debug 2.调试指令2.0quit退出2.1list/l/l 数字: 显示代码2.2run/r运行2.3断点相关1. break num/b num: 设置2. info b: 查看3. d index: 删除4. n: F10逐过程5. p 变量名…

Java必刷入门递归题×5(内附详细递归解析图)

目录 1.求N的阶乘 2.求12...N的和 3.顺序打印数字的每一位 4.求数字的每一位之和 5.求斐波拉契数列 1.求N的阶乘 (1)解析题目意思 比如求5的阶乘,符号表示就是5!;所以5!5*4*3*2*1我们下面使用简单的…

SSM图书管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 图书管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和 数据库,系统主要…

Linux-Docker的基础命令和部署code-server

1.安装docker 1.安装需要的安装包 yum install -y yum-utils2.设置镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.安装docker yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin do…

多彩的树 -----题解(状压dp + 容斥原理)

目录 多彩的树 题目描述 输入描述: 输出描述: 输入 输出 思路解析: 代码实现: 多彩的树 时间限制:C/C 5秒,其他语言10秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 …

【Springboot】Vue3-Springboot引入JWT实现登录校验以及常见的错误解决方案

文章目录 前言一、JWT简单介绍二、token校验设计思路三、使用步骤Springboot部署JWT引入依赖:创建登录实体类后端:LoginController.java路由守卫函数 四、问题 前言 项目版本: 后端: Springboot 2.7、 Mybatis-plus、Maven 3.8.1…

C/C++轻量级并发TCP服务器框架Zinx-游戏服务器开发004:游戏核心消息处理 - 玩家类的实现

文章目录 0 代码仓库1 需求2 AOI设计2.1 AOI算法简介2.2 AOI数据结构及实现2.2.1 玩家2.2.2 网格对象2.2.3 游戏世界矩形2.2.4 获取周围玩家的实现2.2.5 代码测试 2.3 GameRole结合AOI创建玩家2.3.1 创建游戏世界全局对象-GameRole继承AOIWorld的Player2.3.2 把玩家到游戏世界的…

1.docker linux离线环境安装 20.1.0.12

目录 概述下载解压docker 卸载docker 安装检查安装环境常用命令结束 概述 docker离线环境安装 20.1.0.12 , centos 7.x 下载 安装包下载 解压 [roothadoop01 soft]# unzip docker_20_1_0_12.zip [roothadoop01 soft]# cd docker_20_1_0_12 [roothadoop01 docker_20_1_0_1…

数据结构:树的基本概念(二叉树,定义性质,存储结构)

目录 1.树1.基本概念1.空树2.非空树 2.基本术语1.结点之间的关系描述2.结点、树的属性描述3.有序树、无序树4.森林 3.树的常考性质 2.二叉树1.基本概念2.特殊二叉树1.满二叉树2.完全二叉树3.二叉排序树4.平衡二叉树 3.常考性质4.二叉树的存储结构1.顺序存储2.链式存储 1.树 1.…

亚马逊云AI应用科技创新下的Amazon SageMaker使用教程

目录 Amazon SageMaker简介 Amazon SageMaker在控制台的使用 模型的各项参数 pytorch训练绘图部分代码 Amazon SageMaker简介 亚马逊SageMaker是一种完全托管的机器学习服务。借助 SageMaker,数据科学家和开发人员可以快速、轻松地构建和训练机器学习模型&#…

ARM寄存器及功能介绍/R0-R15寄存器

1、ARM 寄存器组介绍 ARM 处理器一般共有 37 个寄存器,其中包括: (1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。 (2) 6 个状态寄存器…

服务号如何升级订阅号

服务号和订阅号有什么区别?服务号转为订阅号有哪些作用?首先我们要知道服务号和订阅号有什么区别。服务号侧重于对用户进行服务,每月可推送4次,每次最多8篇文章,发送的消息直接显示在好友列表中。订阅号更侧重于信息传…

通信信道:无线信道中衰落的类型和分类

通信信道:无线信道中衰落的类型和分类 在进行通信系统仿真时,简单的情况下选择AWGN信道,但是AWGN信道和真是通信中的信道相差甚远,所以需要仿真各种其他类型的信道,为了更清楚理解仿真信道的特点,首先回顾…

linux安装并配置git连接github

git安装 sudo apt-get install git git信息配置 git config --global uer.name "yourname" git config --global user.email "youremail" 其中,yourname是你在github上配置的用户名,youremail是你在github上设置的邮箱 查看git…

Apinto 网关进阶教程,使用 API Mock 生成模拟数据

什么是 API Mock ? API Mock 是一种技术,它允许程序员在不依赖后端数据的情况下,模拟 web服务器端 API 的响应。通常使用 API Mock 来测试前端应用程序,而无需等待后端程序构建完成。API Mock 可以模拟任何 HTTP 请求方法&#x…