redis 特殊类型 和 事务

markdown ### 特殊类型 #### Geospatial ```text #添加key为china:city 的member shanghai geoadd china:city 121.47 31.23 shanghai #获取经纬度 GEOPOS china:city shanghai #计算两个member的距离 GEODIST china:city shanghai beijing #单位km GEODIST china:city beijing shanghai km #查询china:city 里距离经纬度121 21 2000km范围内的member GEORADIUS china:city 121 21 2000 km #反馈1个 GEORADIUS china:city 121 21 2000 km count 1 #反馈距离 GEORADIUS china:city 121 21 2000 km withdist #反馈相关member的经纬度 GEORADIUS china:city 121 21 10000 km withcoord #反馈11位的经纬度,会损失精度 GEOHASH china:city beijing ``` ```text Geospatial 基于 Zset 可以用Zset相关命令进行操作 ``` #### Hyperloglog 基数统计 ```text #添加 pfadd number 1 2 3 4 5 6 7 8 9 1 #返回基数个数 9 pfcount number #合并两组元素 PFMERGE number temp ``` ```text 会出现误差 ``` #### Bitmap ```text #添加sign[0] = 1 setbit sign 0 1 #获取index=2 GETBIT sign 2 #true的个数 BITCOUNT sign ``` ```text 二进制保存数据,只有0 and 1 ``` ### 事务 ```text redis事务的本质就是一组命令的集合 所有命令都会被序列化 没有隔离级别的概念 单条命令保证原子性,但事务不保证原子性 ``` ```text #开启事务 MULTI #执行事务 EXEC #取消事务 DISCARD ``` ```text redis 事务过程中 存在语法问题,无法编译 -- 全部不执行 语法没有问题运行时存在问题 -- 问题语句不执行,其余执行 ``` ### 监控 #### 悲观锁 ```text 很悲观,无论什么都会加锁 ``` #### 乐观锁 ```text 很乐观,认为无论什么都不会出问题,不会上锁 在更新时判断一下,数据是否存在修改 获取version ,并在更新时比较 ``` ```text 127.0.0.1:6379> set money 100 OK 127.0.0.1:6379> set out 0 OK #检测key是否修改 127.0.0.1:6379> watch money OK 127.0.0.1:6379> MULTI OK 127.0.0.1:6379(TX)> DECRBY money 20 QUEUED 127.0.0.1:6379(TX)> INCRBY out 20 QUEUED #正常执行 自动取消watch #若在事务过程中数值修改,整个事务不执行 127.0.0.1:6379(TX)> exec 1) (integer) 80 2) (integer) 20 ``` *

*[返回教程主页](https://www.monody.net/p/blog-page_3.html)*

*

评论