Redis——三个特殊的数据类型+事务

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

概述

全称为远程字典服务。

Redis——基础篇(包含redis在云服务上的docker化安装和连接以及常用命令)_连接docker中的redis_北岭山脚鼠鼠的博客-CSDN博客

Redis能干什么?

1.内存存储、持久化,内存中是断电即失,因此持久化很重要(rdb,aof)

2.效率高,可以用于高速缓存。

3.发布订阅系统

4.地图信息分析

5.计时器,计数器(浏览量)

6. ...

三种特殊数据类型

geospatial地理位置

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

Redis的geo可以推算地理位置的信息,两地之间的距离,方圆几里之内的人。

六个命令

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。

geoadd

城市经纬度查询-国内城市经度纬度在线查询工具

geoadd 用于存储指定的地理空间位置,可以将一个或多个经度(longitude)、纬度(latitude)、位置名称(member)添加到指定的 key 中。

geoadd 语法格式如下:

GEOADD key longitude latitude member [longitude latitude member ...]
#添加单条数据
geoadd china:city 116 39 beijing
#添加多条数据
geoadd china:city 113.28 23.12 guangzhou 121.47 31.23 shanghai

Redis——三个特殊的数据类型+事务,Redis,redis  

geopos

geopos 用于从给定的 key 里返回所有指定名称(member)的位置(经度和纬度),不存在的返回null

语法格式如下

GEOPOS key member [member ...]
#查询单条数据
geopos china:city beijing
#查询多条数据
geopos china:city beijing shanghai

Redis——三个特殊的数据类型+事务,Redis,redis

 geodist

geodist 用于返回两个给定位置之间的距离。

geodist 语法格式如下:

GEODIST key member1 member2 [m|km|ft|mi]

member1 member2 为两个地理位置。

最后一个距离单位参数说明:

  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
geodist china:city beijing shanghai

 Redis——三个特殊的数据类型+事务,Redis,redis

georadius、georadiusbymember

georadius 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。

georadiusbymember 和 georadius 命令一样, 都可以找出位于指定范围内的元素, 但是 georadiusbymember 的中心点是由给定的位置元素决定的, 而不是使用经度和纬度来决定中心点。

georadius 与 georadiusbymember 语法格式如下:

GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。
  • WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。
  • WITHCOORD: 将位置元素的经度和纬度也一并返回。
  • WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
  • COUNT 限定返回的记录数。
  • ASC: 查找结果根据距离从近到远排序。
  • DESC: 查找结果根据从远到近排序。
georadius china:city 110 30 2000 km WITHDIST

Redis——三个特殊的数据类型+事务,Redis,redis

georadiusbymember china:city shanghai 2000 km withdist

Redis——三个特殊的数据类型+事务,Redis,redis

 geohash

Redis GEO 使用 geohash 来保存地理位置的坐标。

geohash 用于获取一个或多个位置元素的 geohash 值。

geohash 语法格式如下:

GEOHASH key member [member ...]

Redis——三个特殊的数据类型+事务,Redis,redis

 删除位置

geo底层用的是zset实现

查看
zrange china:city 0 -1
删除
zrange china:city guangzhou

Hyperloglog

什么是基数?不重复的元素的个数

A{1,3,5,7,8,7} =5    

B{1,3,517,8}  =5

redis Hyperloglog 基数统计的算法

应用场景:

网页的UV(一个人访问一个网站多次,但是还是算作一个人)

传统方式,set保存用户id.

在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

pfadd 

Redis Pfadd 命令将所有元素参数添加到 HyperLogLog 数据结构中。

PFADD key element [element ...]
pfadd mykey 1 2 3 4 4

 Redis——三个特殊的数据类型+事务,Redis,redis

pfcount

Redis Pfcount 命令返回给定 HyperLogLog 的基数估算值。

PFCOUNT key [key ...]
pfcount mykey

Redis——三个特殊的数据类型+事务,Redis,redis

pfmerge

Redis PFMERGE 命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是通过对所有 给定 HyperLogLog 进行并集计算得出的。

PFMERGE destkey sourcekey [sourcekey ...]

 Redis——三个特殊的数据类型+事务,Redis,redis

Bitmaps位存储

setbit

Redis Setbit 命令用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。

Setbit KEY_NAME OFFSET
redis> SETBIT bit 10086 1
(integer) 0

redis> GETBIT bit 10086
(integer) 1

redis> GETBIT bit 100   # bit 默认被初始化为 0
(integer) 0

 Getbit 

Redis Getbit 命令用于对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

GETBIT KEY_NAME OFFSET
redis> GETBIT bit 10086
(integer) 0

 Bitcount

统计一个key里面对应的1有多少

bitcount bit

 Redis事务本质:一组命令的集合,一个事务的所有命令都会被序列化,执行时,会按照顺序执行

一次性,顺序性,排他性。

Redis单条命令是保证原子性的,但是事务不保证原子性。

Redis不存在隔离级别的概念。

执行事务

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。(multi)
  • 命令入队。(其他命令)
  • 执行事务。(exec)

Redis——三个特殊的数据类型+事务,Redis,redis

 关闭事务

Redis——三个特殊的数据类型+事务,Redis,redis

编译型异常

代码问题、命令有错

所有命令都不会执行

Redis——三个特殊的数据类型+事务,Redis,redis

运行时异常 

字符串无法加1,所以失败了。但是其他的正常执行了。

Redis——三个特殊的数据类型+事务,Redis,redis

 监控

悲观锁

无论任何操作都加锁,影响性能。

乐观锁

认为什么时候都不会出问题,所以不会上锁。

更新数据的时候去判断一下,在此期间是否有人修改过这个锁。

获取version,更新时比较version

redis的监视测试

正常监视Redis——三个特殊的数据类型+事务,Redis,redis

 测试多线程修改值时,使用watch可以当做redis的乐观锁。

一个进程在watch之后进了事物,还没执行时,另一个进程在执行时就会修改失败。

Redis——三个特殊的数据类型+事务,Redis,redis

 想要成功可以直接unwatch解锁,然后再次watch监视.

Redis——三个特殊的数据类型+事务,Redis,redis文章来源地址https://www.toymoban.com/news/detail-647544.html

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

原文地址:https://blog.csdn.net/m0_62327332/article/details/132255497

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

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

相关文章

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包