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

发布时间:2023年12月17日

一 geospatial(地理位置)

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

//规则:两级无法直接添加,一般会下载城市数据,直接通过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数据可以忽略不计) 允许容错可以使用 不允许容错则不能使用

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个字节存储一个用户一年的信息

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>
文章来源:https://blog.csdn.net/zhlyxx/article/details/134935532
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。