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>
相关推荐
折翼的恶魔35 分钟前
SQL166 删除索引
数据库
weixin_307779134 小时前
Redis Windows迁移方案与测试
c++·windows·redis·算法·系统架构
auspicious航6 小时前
PostgreSQL 高可用与负载均衡
数据库·postgresql
路由侠内网穿透6 小时前
本地部署 SQLite 数据库管理工具 SQLite Browser ( Web ) 并实现外部访问
运维·服务器·开发语言·前端·数据库·sqlite
六毛的毛7 小时前
FastAPI入门:中间件、CORS跨域资源共享、SQL数据库
数据库·中间件·fastapi
菜萝卜子7 小时前
【Go】新版GORM自动字段映射规则
数据库·golang
yh云想7 小时前
《RedisTemplate 核心操作全解析》
redis·spring·redistemplate
哥哥还在IT中7 小时前
TiDB/MongoDB/Taosdb存储引擎概览
数据库·mongodb·tidb
vision_wei_7 小时前
Redis中间件(二):Redis协议与异步方式
网络·数据库·c++·redis·分布式·缓存·中间件
若梦plus7 小时前
PostgreSQL数据库基础
前端·数据库