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>
相关推荐
米码收割机39 分钟前
【PHP】基于 PHP 的图片管理系统(源码+论文+数据库+图集)【独一无二】
开发语言·数据库·php
飞翔的佩奇2 小时前
Java项目: 基于SpringBoot+mybatis+maven+mysql实现的疾病防控综合管理系统(含源码+数据库+毕业论文)
java·数据库·spring boot·mysql·spring·毕业设计·疾病防控
Anna_Tong2 小时前
DataWorks 与传统数据治理方案相比有哪些优势?
大数据·数据库·阿里云·云计算·数据安全·dataworks
摸鱼仙人~4 小时前
快速上手mybatis教程
数据库·oracle·tomcat
aiweker4 小时前
Python处理数据库:MySQL与SQLite详解
数据库·python
翎野君7 小时前
在业务高峰期更新 PostgreSQL 表结构(DDL)导致性能问题
数据库·postgresql
想做富婆7 小时前
oracle:索引(B树索引,位图索引,分区索引,主键索引,唯一索引,联合索引/组合索引,函数索引)
数据库·oracle·索引
希忘auto8 小时前
详解Redis之事务
redis
yours_Gabriel8 小时前
【Redis_1】初识Redis
数据库·redis·缓存
萝卜青今天也要开心9 小时前
读书笔记-《Redis设计与实现》(二)单机数据库实现(上)
java·数据库·redis·学习·缓存