详解redis的三种特殊数据类型

这篇具有很好参考价值的文章主要介绍了详解redis的三种特殊数据类型。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

14天学习训练营导师课程: 郑为中《Vue和SpringBoot打造假日旅社管理系统》

努力是为了不平庸~
学习有些时候是枯燥的,但收获的快乐是加倍的,欢迎记录下你的那些努力时刻(学习知识点/题解/项目实操/遇到的bug/等等),在分享的同时加深对于知识点的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~
你可以从以下几个方面着手(不强制),或者根据自己对学习课程主题的理解创作,参考如下:

Geospatial(地理位置)

使用经纬度定位地理坐标,底层实现原理就是用一个有序集合zset保存,所以zset命令也可以使用

命令 描述
geoadd key longitud(经度) latitude(纬度) member(名称) [..] 将具体经纬度的坐标存入一个有序集合
geopos key member [member..] 获取集合中的一个/多个成员坐标
geodist key member1 member2 [unit] 返回两个给定位置之间的距离。默认以米作为单位。
georadius key longitude latitude radius m|km|mi|ft [WITHCOORD][WITHDIST] [WITHHASH] [COUNT count] 以给定的经纬度为中心, 返回集合包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUSBYMEMBER key member radius... 功能与GEORADIUS相同,只是中心位置不是具体的经纬度,而是使用结合中已有的成员作为中心点。
geohash key member1 [member2..] 返回一个或多个位置元素的Geohash表示。使用Geohash位置52点整数编码。
$ geopos china:city beijing 获取集合中的一个/多个成员坐标  获得当前定位。是一个坐标值

$ geodist china:city beijing shanghai

$ GEORADIUS china:city 120 30 500 km withcoord # 显示出经度和维度
$ GEORADIUS china:city 120 30 500 km withdist  # 显示到中间的距离

$ GEORADIUS china:city 120 30 500 km withcoord withdist count 1 # 筛选出指定的结果

# 找出位于指定元素周围的其他元素
$ GEORADIUSBYMEMBER china:city shanghai 400 km # 显示在上海周围400km内的城市

# 该命令将返回11个字符的geohash字符串
# 将二维的经纬度转换未一维的字符转,两个字符串越接近,相距越近。
127.0.0.1:6379> geohash china:city beijing shanghai

有效经纬度

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

指定单位的参数 unit 必须是以下单位的其中一个:

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。

关于GEORADIUS的参数

通过georadius就可以完成 附近的人功能

withcoord:带上坐标

withdist:带上距离,单位与半径单位相同

COUNT n : 只显示前n个(按距离递增排序)

  • georadius
# 查询经纬度(120,30)坐标500km半径内的成员
127.0.0.1:6379> GEORADIUS china:city 120 30 500 km withcoord withdist 

1) 1) "hangzhou"
   2) "29.4151"
   3) 1) "120.20000249147415"
      2) "30.199999888333501"
2) 1) "shanghai"
   2) "205.3611"
   3) 1) "121.40000134706497"
      2) "31.400000253193539"
  • geohash
127.0.0.1:6379> geohash china:city yichang shanghai # 获取成员经纬坐标的geohash表示
1) "wmrjwbr5250"
2) "wtw6ds0y300"

Hyperloglog(基数统计)

Redis HyperLogLog 是用来做基数统计的算法,例如:网页的UV(一个人访问一个网站多次,但是还是算作一个人)

传统的方式:set保存 用户的id,然后可以统计set中的元素数量作为标准判断。如果保存大量的ID就会麻烦。目的是为了计数,而不是为了保存用户id

HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定的、并且是很小的。

仅花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。 但是会有一定的容错

  • 如果允许容错,那么一定可以使用Hyperloglog !
  • 如果不允许容错,就使用set或者自己的数据类型即可 !

因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

其底层使用string数据类型

什么是基数?

数据集中不重复的元素的个数。

应用场景:

网页的访问量(UV):一个用户多次访问,也只能算作一个人。

传统实现,存储用户的id,然后每次进行比较。当用户变多之后这种方式及其浪费空间,而我们的目的只是计数,Hyperloglog就能帮助我们利用最小的空间完成。

命令 描述
PFADD key element1 [elememt2..] 添加指定元素到 HyperLogLog 中
PFCOUNT key [key] 返回给定 HyperLogLog 的基数估算值。
PFMERGE destkey sourcekey [sourcekey..] 将多个 HyperLogLog 合并为一个 HyperLogLog
  • PFADD–PFCOUNT
127.0.0.1:6379> PFADD myelemx a b c d e f g h i j k # 添加元素
(integer) 1
127.0.0.1:6379> type myelemx # hyperloglog底层使用String
string
127.0.0.1:6379> PFCOUNT myelemx # 估算myelemx的基数
(integer) 11
127.0.0.1:6379> PFADD myelemy i j k z m c b v p q s
(integer) 1
127.0.0.1:6379> PFCOUNT myelemy
(integer) 11
  • PFMERGE
127.0.0.1:6379> PFMERGE myelemz myelemx myelemy # 合并myelemx和myelemy 成为myelemz
OK
127.0.0.1:6379> PFCOUNT myelemz # 估算基数
(integer) 17

BitMaps(位图)

使用位存储,信息状态只有 0 和 1,操作二进制位进行记录

Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR,NOT以及其它位操作。

应用场景

签到统计、状态统计,统计用户信息:活跃,登陆状态等

命令 描述
setbit key offset value 为指定key的offset位设置值
getbit key offset 获取offset位的值
bitcount key [start end] 统计字符串被设置为1的bit数,也可以指定统计范围按字节
bitop operration destkey key[key..] 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
BITPOS key bit [start] [end] 返回字符串里面第一个被设置为1或者0的bit位。start和end只能按字节,不能按位
  • setbit–getbit
127.0.0.1:6379> setbit sign 0 1 # 设置sign的第0位为 1 
(integer) 0
127.0.0.1:6379> setbit sign 2 1 # 设置sign的第2位为 1  不设置默认 是0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 5 1
(integer) 0
127.0.0.1:6379> type sign
string

127.0.0.1:6379> getbit sign 2 # 获取第2位的数值
(integer) 1
127.0.0.1:6379> getbit sign 3
(integer) 1
127.0.0.1:6379> getbit sign 4 # 未设置默认是0
(integer) 0
  • bitcount
127.0.0.1:6379> BITCOUNT sign # 统计sign中为1的数量
(integer) 4

bitmaps的底层

设置以后能get到的值是:\xA2\x80,所以bitmaps是一串从左到右的二进制串文章来源地址https://www.toymoban.com/news/detail-826988.html

到了这里,关于详解redis的三种特殊数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis入门 - 3种特殊数据类型

    原文首更地址,阅读效果更佳! Redis入门 - 3种特殊数据类型 | CoderMast编程桅杆 https://www.codermast.com/database/redis/three-special-datatype.html 在我们平常的业务中基本只会使用到Redis的基本数据类型(String、List、Hash、Set、Sorted Set),特殊类型(Geo、Bitmap、Hyperloglog)类型只有在特殊的

    2024年02月09日
    浏览(24)
  • 【Redis】特殊数据类型 Geo (地理位置)

    除了五中基本的数据类型外,Redis还支持两种特殊的数据类型,第一种 Geo (地理位置):用于存储地理位置相关的数据,例如经纬度、距离等。第二种 Stream (流):是一个高级的列表类型,支持对列表的批量操作,如添加多个元素、获取多个元素等。 Redis GEO(Geo Redis)是一个用

    2024年02月15日
    浏览(30)
  • Redis的3大特殊数据类型(1)-BitMap

    BitMap(位图/位数组) 是Redis2.2.0版本中引入的一种新数据类型,该数据类型本质是一个 仅含0和1 的二进制字符串。因此可以把 Bitmap 想象成一个 以位为单位的数组 ,数组的每个单元 只能存储 0 和 1 ,数组的下标在 Bitmap 中叫做偏移量 offset,bitmap默认值都为0. BitMap底层实际上使

    2024年02月11日
    浏览(38)
  • Redis数据一致性问题的三种解决方案

    Redis(Remote Dictionary Server ),是一个高性能的基于Key-Value结构存储的NoSQL开源数据库。大部分公司采用Redis来实现分布式缓存,用来提高数据查询效率。 在Web应用发展的初期,系统的访问和并发并不高,交互也比较少。但随着业务的扩大,访问量的提升,使得服务器负载和关系

    2024年02月14日
    浏览(28)
  • redis的三种集群方式

    redis有三种集群方式:主从复制,哨兵模式和集群。     1.主从复制   主从复制原理:   从服务器连接主服务器,发送SYNC命令;  主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;  主服务器BGSAVE执行完后,向所有从服务器

    2024年02月13日
    浏览(35)
  • Redis的三种部署方案

    在Redis中提供的集群方案总共有三种:单机模式,主从复制集群、哨兵模式,Redis分片集群 Redis 只运行在一台服务器上,并且所有的数据都存储在这一台服务器的内存中。 搭建主从复制集群解决的是高并发读问题。 单个Redis节点的并发能力有限,要进一步提高Redis的并发能力

    2024年04月10日
    浏览(22)
  • Redis的三种集群模式(图解)

    主从复制模式 一个主节点和多个从节点。主节点提供写入和读取功能,但是从属节点只提供读取功能。 主从复制的数据同步过程如下: (1)首先主节点启动,然后从属节点启动,从属节点会连接主节点并发送SYNC命令以请求同步 (2)主节点收到SYNC命令之后,就会执行BGSA

    2024年03月12日
    浏览(35)
  • Redis实现限流的三种方式

    所谓固定窗口限流即时间窗口的起始和结束时间是固定的,在固定时间段内允许要求的请求数量访问,超过则拒绝;当固定时间段结束后,再重新开始下一个时间段进行计数。 我们可以根据当前的时间,以分钟为时间段,每分钟都生成一个key,用来inc,当达到请求数量就返回

    2024年02月11日
    浏览(32)
  • Redis 实现限流的三种方式

    面对越来越多的高并发场景,限流显示的尤为重要。 当然,限流有许多种实现的方式,Redis具有很强大的功能,我用Redis实践了三种的实现方式,可以较为简单的实现其方式。Redis不仅仅是可以做限流,还可以做数据统计,附近的人等功能,这些可能会后续写到。 我们在使用

    2024年02月11日
    浏览(28)
  • 【征服redis14】认真理解一致性Hash与Redis的三种集群

    前面我们介绍了主从复制的方式和sentinel方式,这里我们看第三种模式-Cluster方式。 目录 1.前两种集群模式的特征与不足 2.Cluster模式 2.1 Cluster模式原理  2.2 数据分片与槽位 2.3 Cluster模式配置和实现 3.一致性Hash 3.1 哈希后取模 3.2 一致性Hash算法 4 Redis Cluster集群 主从复制是Red

    2024年01月22日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包