redis的五种数据类型以及用途(redis 有哪些数据类型)

技术Redis中的特殊数据类型有哪些这篇文章将为大家详细讲解有关Redis中的特殊数据类型有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis除了5种基础数据类型,还有三种特

本文将详细解释Redis中的特殊数据类型。边肖觉得挺实用的,分享给大家参考。希望你看完这篇文章能有所收获。

Redis中除了五种基本数据类型外,还有三种特殊的数据类型,即HyperLogLogs(基数统计)、Bitmaps(位图)和geospatial(地理位置)。

00-1010版本的redis 2.8.9更新了Hyperloglog数据结构!

什么是基数?

例如,A={1,2,3,4,5}和b={3,5,6,7,9 };那么基数(非重复元素)=1,2,4,6,7,9;(允许公差,即可以接受某些误差)

HyperLogLogs 基数统计用来解决什么问题

这种结构可以节省内存来统计各种计数,比如注册的IP号、日IP号、页面实时UV、在线用户、共同好友等等。

它的优势体现在哪

比如一个大型网站,每天有100万个IP,大致一个IP消耗15个字节,那么100万个IP就是15M。但是Redis中HyperLogLog的每个键占用12K,理论存储接近2.64个值。无论存储的内容是什么,Hyperloglog都是一种基于基数估计的算法,只能准确估计基数,并且可以使用少量的固定内存来存储和识别集合中唯一的元素。而且估计的基数不一定准确,是标准误差为0.81%的近似值(对于可以接受一定容错的业务场景,如IP数统计、UV等。可以忽略)。

相关命令使用

创建第一组元素

(整数)1

17.0.0.1:6379 pfcountkey1 #统计元素基数数

(整数)9

17 . 0 . 0 . 1:6379 pf addkey 2 cjklmoga #创建第二组元素

(整数)1

127.0.0.1:6379pfcountkey2

(整数)8

17 . 0 . 0 . 1:6379 pfmergekey 3 key 1 key 2 #合并两个组:key 1k key 2-key 3 merge。

127.0.0.1:6379pfcountkey3

(整数)13

HyperLogLogs(基数统计)

Bitmap,即位图数据结构,全部操作二进制位进行记录,只有0和1两种状态。

用来解决什么问题

例如:统计用户信息,活动,非活动!登录,未登录!打卡,别打卡!两个状态的,都可以使用 Bitmaps

存储打卡状态一年需要多少内存?35天=365位1字节=8位46字节左右!

相关命令使用

用位图记录周一到周日打卡!周一:1周二:0周三:0周四:1.

127.0.0.1:6379setbitsign01

(整数)0

127.0.0.

1:6379> setbit sign 1 1
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 0
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 1
(integer) 0

查看某一天是否有打卡!

127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 5
(integer) 0

统计操作,统计 打卡的天数!

127.0.0.1:6379> bitcount sign # 统计这周的打卡记录,就可以看到是否有全勤!
(integer) 3

geospatial (地理位置)

Redis 的 Geo 在 Redis 3.2 版本就推出了! 这个功能可以推算地理位置的信息:两地之间的距离,,方圆几里的人。

geoadd

添加地理位置

127.0.0.1:6379> geoadd china:city 118.76 32.04 manjing 112.55 37.86 taiyuan 123.43 41.80 shenyang
(integer) 3
127.0.0.1:6379> geoadd china:city 144.05 22.52 shengzhen 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 3

规则

两级无法直接添加,我们一般会下载城市数据(这个网址可以查询 GEO:http://www.jsons.cn/lngcode)!

  • 有效的经度从-180度到180度。

  • 有效的纬度从-85.05112878度到85.05112878度。

# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。
127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin
(error) ERR invalid longitude,latitude pair 39.900000,116.400000

geopos

获取指定的成员的经度和纬度

127.0.0.1:6379> geopos china:city taiyuan manjing
1) 1) "112.54999905824661255"
   1) "37.86000073876942196"
2) 1) "118.75999957323074341"
   1) "32.03999960287850968"

获得当前定位, 一定是一个坐标值!

geodist

如果不存在, 返回空

单位如下

  • m

  • km

  • mi 英里

  • ft 英尺

127.0.0.1:6379> geodist china:city taiyuan shenyang m
"1026439.1070"
127.0.0.1:6379> geodist china:city taiyuan shenyang km
"1026.4391"

georadius

附近的人 ==> 获得所有附近的人的地址, 定位, 通过半径来查询

获得指定数量的人

127.0.0.1:6379> georadius china:city 110 30 1000 km			以 100,30 这个坐标为中心, 寻找半径为1000km的城市
1) "xian"
2) "hangzhou"
3) "manjing"
4) "taiyuan"
127.0.0.1:6379> georadius china:city 110 30 500 km
1) "xian"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist
1) 1) "xian"
   2) "483.8340"
127.0.0.1:6379> georadius china:city 110 30 1000 km withcoord withdist count 2
1) 1) "xian"
   2) "483.8340"
   3) 1) "108.96000176668167114"
      2) "34.25999964418929977"
2) 1) "manjing"
   2) "864.9816"
   3) 1) "118.75999957323074341"
      2) "32.03999960287850968"

参数 key 经度 纬度 半径 单位 [显示结果的经度和纬度] [显示结果的距离] [显示的结果的数量]

georadiusbymember

显示与指定成员一定半径范围内的其他成员

127.0.0.1:6379> georadiusbymember china:city taiyuan 1000 km
1) "manjing"
2) "taiyuan"
3) "xian"
127.0.0.1:6379> georadiusbymember china:city taiyuan 1000 km withcoord withdist count 2
1) 1) "taiyuan"
   2) "0.0000"
   3) 1) "112.54999905824661255"
      2) "37.86000073876942196"
2) 1) "xian"
   2) "514.2264"
   3) 1) "108.96000176668167114"
      2) "34.25999964418929977"

参数与 georadius 一样

geohash(较少使用)

该命令返回11个字符的hash字符串

127.0.0.1:6379> geohash china:city taiyuan shenyang
1) "ww8p3hhqmp0"
2) "wxrvb9qyxk0"

将二维的经纬度转换为一维的字符串, 如果两个字符串越接近, 则距离越近

底层

geo底层的实现原理实际上就是Zset, 我们可以通过Zset命令来操作geo

127.0.0.1:6379> type china:city
zset

查看全部元素 删除指定的元素

127.0.0.1:6379> zrange china:city 0 -1 withscores
 1) "xian"
 2) "4040115445396757"
 3) "hangzhou"
 4) "4054133997236782"
 5) "manjing"
 6) "4066006694128997"
 7) "taiyuan"
 8) "4068216047500484"
 9) "shenyang"
1)  "4072519231994779"
2)  "shengzhen"
3)  "4154606886655324"
127.0.0.1:6379> zrem china:city manjing
(integer) 1
127.0.0.1:6379> zrange china:city 0 -1
1) "xian"
2) "hangzhou"
3) "taiyuan"
4) "shenyang"
5) "shengzhen"

关于“Redis中的特殊数据类型有哪些”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/155147.html

(0)

相关推荐

  • 两个虫子,词中那个两个字都是虫子旁

    技术两个虫子,词中那个两个字都是虫子旁螳螂两个虫子、蚱蜢、蚯蚓、蛐蛐、蜘蛛、蜻蜓、蜥蜴、蝈蝈、蟑螂、蝴蝶、蝌蚪、蝙蝠、蚂蝗、蚂蚁、蜂蛹、蝼蛄、蚍蜉、蚊蚋、蜈蚣、蜿蜒、螟蛉、蛤蟆、螃蟹、蜜蜂、蚰蜒、蚕蛹、蝽蛳、螺蛳、蟪蛄、

    生活 2021年10月20日
  • 支付宝转账记录怎么查,支付宝转账记录怎么查

    技术支付宝转账记录怎么查,支付宝转账记录怎么查支付宝转账记录怎么查?现在我们很多时候都会使用支付宝的转账功能。不过有的时候我们会忘记转账给谁了转账了多少钱,那么支付宝转账记录怎么查看呢?支付宝转账记录又在哪查看呢?现在就

    生活 2021年10月28日
  • ubuntu中如何解决php无法编译问题

    技术ubuntu中如何解决php无法编译问题小编给大家分享一下ubuntu中如何解决php无法编译问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一

    2021年12月10日
  • Qt中树形控件Tree Widget的使用方法有哪些

    技术Qt中树形控件Tree Widget的使用方法有哪些本篇内容主要讲解“Qt中树形控件Tree Widget的使用方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Q

    攻略 2021年11月30日
  • Redis中慢查询和订阅模式是什么

    技术Redis中慢查询和订阅模式是什么这篇文章主要讲解了“Redis中慢查询和订阅模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis中慢查询和订阅模式是什

    攻略 2021年11月15日
  • Redis中sentinel故障转移的示例分析

    技术Redis中sentinel故障转移的示例分析这篇文章主要为大家展示了“Redis中sentinel故障转移的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Red

    攻略 2021年10月28日