Redis研学-三种特殊类型的常用命令

一 geospatial(地理位置)

朋友的定位,附近的人,打车距离计算(城市经纬度查询:可以查询一些测试数据)

java 复制代码
//规则:两级无法直接添加,一般会下载城市数据,直接通过java程序一次性导入 key(经 纬 地名)
//有效的经度从-180度到180度,纬度从-85.05112878度到85.05112878度,超出范围返回错误
geoadd china:city 116.40 39.90 beijing//设置北京的地理位置
geoadd china:city 121.47 31.23 shanghai//设置上海的地理位置
geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen//设置重庆 深圳
//获取城市经纬度 获得当前定位一定是一个坐标值
geopos china:city beijing//获取指定城市(北京)经纬度
geopos china:city beijing chongqing//获取北京重庆经纬度 
//计算两个坐标(北京到上海)之间的直线距离(千米)
geodist china:city beijing shanghai km
//以给定的经纬度为中心,找出每一半径中的元素(获取所有附近的人定位,通过半径查询 应用于好友定位) 
georadius china:city 110 30 1000 km//半径1000公里查询经纬度110 30
georadius china:city 110 30 1000 km withdist//输出查询结果带上直线距离
georadius china:city 110 30 1000 km withcoord//输出查询结果带上经纬度
georadius china:city 110 30 1000 km withdist withcoord count 1//半径内人数很多,只展示1个附近的人(可以通过count进行限制,限定展示人数,人少就有多少展示多少)
//以元素(北京)为中心,搜寻半径1000公里内的元素 应用于城市定位
georadiusbymember china:city beijing 1000 km
//获取当前城市经纬度所代表的字符串(将二维的经纬度转化为一维的11位字符串,越长越精确)
geohash china:city beijing
//geo的底层实现原理其实就是Zset 我们可以使用zset命令操作geo
zrange china:city 0 -1//获取当前所有的元素
zrem china:city beijing//移除geo中的指定元素

二 Hyperloglog(基数统计算法)

基数指集合中不重复的元素 A{1,3,5,7,8,7}基数为5 B{1,3,5,7,8}基数为5,可以接受误差

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

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

这个方式如果保存大量的用户id就会比较麻烦,我们的目的是为了计数,而不是保存用户id

Hyperloglog的优点:占用的内存是固定的,2^64位不同的基数,只需要废12kb的内存,从内存角度来比较Hyperloglog是首选。但它存在0.81%的错误率(官方说的统计UV数据可以忽略不计) 允许容错可以使用 不允许容错则不能使用

java 复制代码
pfadd mykey a b c d e f g//将大量元素存入mykey第一组元素
pfadd mykey2 q w e r t y u i//将大量元素存入mykey第二组元素
pfcount mykey//统计基数元素数量
pfmerge mykey3 mykey mykey2//取mykey和mykey2的基数并集 放入mykey3

三 Bitmaps(位存储)-位图 数据结构 二进制记录

统计疫情感染人数:0 1 0 1 1(0代表未感染 1代表已感染)

统计用户信息:登录 未登录,打卡365打卡(只用两种状态,都可以使用bitmaps)

365天=365bit 1字节=8bit 46个字节存储一个用户一年的信息

java 复制代码
setbit sign 0 1//设置 key 0(通过数字代表信息例如周几) 0(只有0 1两种状态)
getbit sign 0//查询周1的打卡记录 返回他的0 1状态
bitcount sign//统计操作 统计这周打卡的天数(状态为1的天数)

// 设置key从0-7表示周1到周日 0 未打卡 1 已打卡
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(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 1
(integer) 0
127.0.0.1:6379>  setbit sign 5 1
(integer) 0
127.0.0.1:6379>  setbit sign 6 0
(integer) 0
127.0.0.1:6379>  setbit sign 7 0
(integer) 0
// 统计一周上了几天班
127.0.0.1:6379> bitcount sign
(integer) 3
127.0.0.1:6379>
相关推荐
蜘蛛小助理2 分钟前
研发团队效率神器:手把手教你用蜘蛛表格构建自动化任务管理中枢
数据库·自动化·任务管理·多维表格·蜘蛛表格
计算机毕设VX:Fegn089512 分钟前
计算机毕业设计|基于springboot + vue酒店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
Hui Baby15 分钟前
全局事务入口感知子事务方法-TCC
java·开发语言·数据库
Leon-Ning Liu29 分钟前
Oracle 19c RAC报错ORA-17503,ORA-27300,ORA-27301,ORA-27302
数据库·oracle
嘟嘟w1 小时前
DROP DELETE 和TRUNCATE的区别?
数据库·mysql·oracle
rocksun1 小时前
Tigris对象存储正式开源MCP OIDC身份提供商
redis·安全·微服务
Navicat中国1 小时前
Navicat x 达梦技术指引 | 数据字典
数据库·达梦·可视化·navicat·数据字典
摇滚侠1 小时前
Redis 零基础到进阶,Spring Boot 整合 Redis,笔记93-99
spring boot·redis·笔记
running up2 小时前
Spring核心深度解析:AOP与事务管理(TX)全指南
java·数据库·spring
一水鉴天2 小时前
整体设计 定稿 之6 完整设计文档讨论及定稿 之1(豆包周助手)
java·前端·数据库