redis 三种特殊数据类型

三种特性数据类型

geospatial

定位,附近的人,打车距离计算。

redis的geo在redis3.2版本就推出了。可推算地理位置的信息,两地之间的距离,方圆几里的人。

6个命令。

GEOADD
GEODIST
GEOHASH
GEOPOS
GEORADIUS
GEORADIUSBYMEMBERhttps://redis.io/commands/geoadd
# geoadd china:city 经度 纬度 城市
# 可通过程序将信息读取到redis中..geoadd china 116.40 39.90 beijing
geoadd china:city 121.47 31.23 shanghai
geoadd china:city 120.16 30.24 hangzhou# geopos 获取城市所在的经纬度
getpos china:city beijing
getpos china:city hangzhou beijing # geodist 获取两个位置之间的距离
# m 米, km 千米, mi 英里, ft 英尺geodist china:city beijing shanghai km
geodist china:city beijing hangzhou km# 需求:我附近的人?通过半径来查询。
# 获取指定数量的人。
# georaduis 以给定的经纬度为中心,找出某一半径内的元素
georadius china:city 110 30 1000 km # 当前经度110,维度30 获取半径1000km的城市georadius china:city 110 30 500 km withdis # 获取到城市,距离georadius china:city 110 30 500 km withcoord # 获取到城市,经纬度georadius china:city 110 30 500 kim withdis withcoord count 1 # 获取500千米内一个城市,经纬度,距离,# georadiusBymember 根据某个城市找到附近的城市
georadiusbymember china:city beijing 1000km # 找出北京附近1000km的城市# geohash 返回一个或者多个位置元素的geohash表示
# 返回11个字符的geohash字符串
geohash china:city bejing shanghai# geo的底层实现原理就是zset,可以使用zset来操作geo
# 具体见zset操作有序集合,127.0.0.1:6379[1]> zrem china:city hangzhou
(integer) 1
127.0.0.1:6379[1]> zrange china:city 0 -1
1) "shanghai"
2) "beijing"

hyperloglogs

2.8.9 hyperloglog 数据结构
redis hyperloglog 基数统计的算法 (不重复)
优点:占用内存是固定的。2^64不同的元素的基数,只需要12kb内存。
网页的uv(一个人访问一个网站多次,但是还是算作一个人。)传统的方式,set保存用户的id,然后就可以统计set中的元素数量作为标准判断。
set的确定,用户id太长,太多。是为了计数。
测试使用
# 一组数
pfadd mykey a b c d e f g h i j
# 获取不重复长度
pfcount mykey
# new 
pfadd mykey2 i j z x c v b n m
# get len
pfcount mykey2
# 合成新的key 
pfmerge mykey 3 mykey my key2
# 两组key的合并后不重复字符的长度
pfcount mykey3# demo# 第一组数
127.0.0.1:6379[1]> pfadd key1 a b c d e f g
(integer) 1
127.0.0.1:6379[1]> pfcount key1
(integer) 7
# 第二组数
127.0.0.1:6379[1]> pfadd key2 e f g h i j k
(integer) 1
127.0.0.1:6379[1]> pfcount key2
(integer) 7
# 合成一组基数
127.0.0.1:6379[1]> pfmerge key3 key1 key2
OK
127.0.0.1:6379[1]> pfcount key3
(integer) 11

如果允许容错,可使用hyperloglog来进行网站访问统计。

不容错,使用set,或者自定义。

bitmap

# 位存储
# 统计疫情的感染人数 01 01 
# 统计用户信息 活跃,不活跃。登录,未登录。打卡。两个状态的都可使用bitMaps.
# 位图,也是一种数据库的。都是操作二进制位来进行记录。就只有0和1两个状态。# setbit sign offset value 设置值
# getbit sign offset   获取值
# bitcount sign (start, end) 统计值为1的# 打开demo,假设已经打开的为1,位打开的为0# 设置周一到周天打开信息 0未打开,1已经打开
127.0.0.1:6379[1]> setbit sign 0 1
(integer) 0
127.0.0.1:6379[1]> setbit sign 1 0
(integer) 0
127.0.0.1:6379[1]> setbit sign 2 0
(integer) 0
127.0.0.1:6379[1]> setbit sign 3 1
(integer) 0
127.0.0.1:6379[1]> setbit sign 4 1
(integer) 0
127.0.0.1:6379[1]> setbit sign 5 0
(integer) 0
127.0.0.1:6379[1]> setbit sign 6 1
(integer) 0
# 获取打开信息 周六
127.0.0.1:6379[1]> getbit sign 5
(integer) 0
# 获取打卡信息 周末
127.0.0.1:6379[1]> getbit sign 6
(integer) 1
# 统计打卡的数量1
127.0.0.1:6379[1]> bitcount sign
(integer) 4
127.0.0.1:6379[1]> bitcount sign 0 6
(integer) 4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1298):gulp使用

第一步安装 第二步建立文件夹 第三部 src放源代码 第四步 输入代码 执行

Sentinel 分布式系统的流量防卫兵

sentinelsentinel base服务编写关键名词解释sentinel base 官网: https://github.com/alibaba/Sentinel https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D 是什么? 是一款优秀的限流,降级,熔断的框架。 Sentinel …

php查询mysql返回大量数据结果集导致内存溢出的解决方法

web开发中如果遇到php查询mysql返回大量数据导致内存溢出、或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答案是: mysql_query 和 mysql_unbuffered_query 两个函数 首先来分析一个典型的实例:…

前端学习(1299):gulp插件

第一步 下载 第二步 const gulp require(gulp); const htmlmin require(gulp-htmlmin);gulp.task(first, () > {console.log(第一次执行);}); gulp.task(htmlmin, () > {gulp.src(./src/*.html)//压缩去其中的代码.pipe(htmlmin({ collapseWhitespace: true })).pipe(…

前端学习(1300)报错:无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本...

解决报错: (1)以管理员身份运行命令行设置即可 (2)在终端执行:get-ExecutionPolicy,显示Restricted(表示状态是禁止的) (3)在终端执行&#xff…

动态规划系列 | 最长上升子序列模型(上)

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

docker 安装部署nacos

docker 安装nacospull镜像配置mysql挂载运行单机nacos部署。考虑到nacos比较耗费性能,使用docker部署学习。 pull镜像 1.3.1 是github上说明的稳定版本. 至少现在是。 docker pull nacos/nacos-server:1.3.1配置mysql 1. mysql创建nacos_config 数据库2. 数据sq…

ASP.NET(c#)实现重定向的三种方法的总结

(1)Server.Transfer方法: Server.Transfer("m2.aspx");//页面转向(服务器上执行). 服务器停止解析本页,保存此页转向前的数据后,再使页面转向到m2.aspx, 并将转向前数据加上m2.aspx页结果返回给浏览器. (2)Server.Execute方法: Server.Execute("m2.aspx")…

前端学习(1301):gulp建立任务csso和less

const gulp require(gulp); const htmlmin require(gulp-htmlmin); const fileinclude require(gulp-file-include); const less require(gulp-less); gulp.task(first, () > {console.log(第一次执行);});gulp.task(htmlmin, () > {gulp.src(./src/*.html)//压缩去其…

just for rest~

整理了一些可以放昵称的可爱符号!ᑋᵉᑊᑊᵒ ᵕ̈ ᑋᵉᑊᑊᵒഒ˙˙₍ᐢ..ᐢ₎˙Ⱉ˙(⌓) ִִ•ᴥ•ଲॱଳॱ————————————ꙫ˙Ꙫ˙・◡・꒦ິ^꒦ິ•́‸กᵕ᷄≀ ̠˘᷅- ̗̀(ᵔ⌔ᵔ)˙Ⱉ˙˃̶͈ ˂̶͈՞• •՞˙Ⱉ˙҉ง⍢⃝

前端学习(1302):实现es6的转化

const gulp require(gulp); const htmlmin require(gulp-htmlmin); const fileinclude require(gulp-file-include); const less require(gulp-less); const csso require(gulp-csso); const babel require(gulp-babel); gulp.task(first, () > {console.log(第一次执…

EF6 如何判断DataContext有修改,以及如何放弃修改

如何判断DataContext有修改: EF6的 using (var db new Model1()) {if (db.ChangeTracker.HasChanges()){Console.WriteLine("Something has changed");} } EF5中: public bool HasUnsavedChanges(){return this.ChangeTracker.Entries().Any(…

boot整合redis

redisTemplate封装pomredisTemplate配置类redis工具类封装pom <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>redisTemplate配置类 覆盖默认的redis模板…

前端学习(1303):复制文件夹

const gulp require(gulp); const htmlmin require(gulp-htmlmin); const fileinclude require(gulp-file-include); const less require(gulp-less); const csso require(gulp-csso); const babel require(gulp-babel); gulp.task(first, () > {console.log(第一次执…

[另开新坑] 算导v3 #26 最大流 翻译

26 最大流 就像我们可以对一个路网构建一个有向图求最短路一样,我们也可以将一个有向图看成是一个"流量网络(flow network)",用它来回答关于流的问题. Just as we can model a road map as a directed graph in order to find the shortest path from one point to a…

springdata jpa单表操作crud

spring data jpa1. 项目搭建1.1 配置1.2 实体类1.3 继承JpaRepository接口2. 批量新增3. 查询4. 修改 by hql5. 删除 by hql1. 项目搭建 使用boot整合&#xff0c;导入springdata jap, mysql 驱动&#xff0c;lombok&#xff0c;web。 1.1 配置 # boot add jpa, oh~ crud in…

呀~ 一个.java的源文件可以写这么多类啊

1. 外部类 (写在pulic修饰的类外面) 2. 静态内部类(写在类的里面) 3. 局部内部类(写在方法里面) 4. 匿名内部类 5. 函数式接口。lambada表达式。public class LambdaDemo01 {/*** 2. 静态内部类*/static class Love02 implements Lover {Overridepublic void love() {System.ou…

js打开、关闭页面和运行代码那些事

<!doctype html> <html> <head> <meta charset"utf-8"> <meta name"author" content"智能社 - zhinengshe.com"> <meta name"copyright" content"智能社 - zhinengshe.com"> <title…