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)*
*
评论