当前位置: 首页 > news >正文

redis笔记——三种特殊的数据结构

三种特殊数据类型

geospatial(地理位置)

用于定位,附近的人,距离计算

添加元素

geoadd key 经度 纬度 描述名称,可一次添加多个元素

127.0.0.1:6379> geoadd china:city 113.28 23.12 guangzhou
(integer) 1
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai 106.50 29.53 chongqi 114.05 22.52 sshengzhen
(integer) 3

获取元素

获取key中某个字段的经纬度,可一次获取多个字段的经纬度

127.0.0.1:6379> geopos china:city guangzhou chongqi
1) 1) "113.27999979257583618"2) "23.1199990030198208"
2) 1) "106.49999767541885376"2) "29.52999957900659211"

计算两点之间的距离

跟上km参数表示结果使用千米作为单位。参数m表示米

127.0.0.1:6379> geodist china:city guangzhou chongqi km
"981.9531"

实现看我附近的人功能

georadius以给定的经纬度为中心,查找某一半径内的元素

#从china:city集合中查找 以经纬度为110 30为圆心,1000km内的所有的元素
127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqi"
2) "sshengzhen"
3) "guangzhou"

参数

  • withdist,附近的人并且显示两点的直线距离
  • withcoord,同时显示找到的元素的经纬度

指定geospatial类型元素进行查询

127.0.0.1:6379> georadiusbymember china:city guangzhou 1000 km
1) "sshengzhen"
2) "guangzhou"
3) "chongqi"

geohash

该命令会返回一个由经纬度编码的hash值

127.0.0.1:6379> geohash china:city guangzhou chongqi
1) "ws0e98zgz20"
2) "wm5xzrybty0"

geospatial底层实现其实就是zset

那么我们就可以使用zset 的命令来操作geospatial类型,比如删除元素,获取成员列表

127.0.0.1:6379> zrange china:city 0 -1
1) "chongqi"
2) "sshengzhen"
3) "guangzhou"
4) "shanghai"
127.0.0.1:6379> zrem china:city chongqi
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "sshengzhen"
2) "guangzhou"
3) "shanghai"

Hyperloglog

一种数据结构,优点是节省内存空间,可以用来计数,例如统计网站的用户访问量(UV)。但是会出现一定的错误率,要在允许容错的情况下使用

127.0.0.1:6379> pfadd key1 a b c d e f g h i j #添加hyperloglog
(integer) 1
127.0.0.1:6379> pfcount key1  #统计key中的元素个数
(integer) 10
127.0.0.1:6379> pfadd key2 i j z x c v b n m
(integer) 1
127.0.0.1:6379> pfcount key2
(integer) 9
127.0.0.1:6379> pfmerge key3 key1 key2  #将多个key做并集操作,第一个参数就是输出的key
OK
127.0.0.1:6379> pfcount key3
(integer) 15

bitmaps

位图,通过操作二进制位来表示信息,一个位只有两个表示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 0
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> getbit sign 0   #获取位
(integer) 1
127.0.0.1:6379> getbit sign 2
(integer) 0
127.0.0.1:6379> bitcount sign  #统计所有位为1的数量
(integer) 2
http://www.lryc.cn/news/60478.html

相关文章:

  • 网络安全之编码加密算法
  • mp4视频无法播放的解决方法
  • 搭建Mysql
  • 气传导和骨传导耳机哪个好?简单科普这两种蓝牙耳机
  • 浅尝GoWeb开发之Gin框架
  • 工程行业管理系统-专业的工程管理软件-提供一站式服务
  • 目标检测YOLO系列-YOLOV7运行步骤(推理、训练全过程)
  • Spring Boot + Spring Security基础入门教程
  • MySQL数据库,表的增删改查详细讲解
  • SpringCloud-Gateway实现网关
  • Redis 如何配置读写分离架构(主从复制)?
  • 代码随想录二刷day05 | 哈希表之242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
  • 2023年4月广东省计算机软考中/高级备考班招生简章
  • 在Github中77k星的王炸AutoGPT,会独立思考,直接释放双手
  • FVM链的Themis Pro,5日ido超百万美元
  • OpenCV实战——尺度不变特征检测器
  • 如何快速建立一个podman环境
  • 计算机视觉:人工智能领域当下火热的计算机视觉技术综述
  • EMC 专用名词大全~骚扰波形
  • 14:24面试,14:32就出来了 ,问的实在是太...
  • 高频算法题
  • AI工程师眼中的未来 | 年轻人如何求职选方向
  • 能自动翻译的软件-最精准的翻译软件
  • 7.1 大学排行榜分析(project)
  • TensorFlow 2.0 的新增功能:第三、四部分
  • 第1章 如何听起来像数据科学家
  • 哈希表题目:在系统中查找重复文件
  • 机器人感知与控制关键技术及其智能制造应用
  • 精通线程池,看这一篇就够了
  • 解决图片、视频地址加密问题