Redis --- 其它高级特性
注: 以下内容收集自网络,进行整理记录
EXPIRE命令(PEXPIRE命令和EXPIRE命令一样,单位是毫秒)
EXPIRE KEY TIME:TIME表示有效时间,单位为秒
TTL KEY:查询键的有效时间
PERSIST KEY:将键固话 也就是永久有效,如果使用SET,GETSET命令为键赋值也会同时清除键的有效时间。
EXPIREAT KEY TIME:和EXPIRE的区别是,TIME参数使用UNIX时间作为键的截至时间。
注意:如果使用WATCH命令监测一个拥有生存时间的键,该键到时清除不会被WATCH命令监控到认为是一种改变。
Maxmemory: 最大内存
Maxmemory-policy:内存策略,当内存达到最大值的处理策略,可以配置为:
策略 |
说明 |
Volatile-lru |
使用LRU算法删除一个键(只对设置了生存时间的键其作用) |
Allkeys-lru |
使用LRU算法删除一个键 |
Volatile-rando |
随机删除一个键(只对设置了生存时间的键) |
Allkeys-random |
随机删除一个键 |
Valotile-ttl |
删除生存时间最近的一个键 |
Noeviction |
不删除键,值返回错 |
Redis实现了简单了发布和订阅的实现,没有安全和可靠性的保障,因此只能运用于一些对安全和可靠性要求不高的场景。
命令:
PSUBSCRIBE pattern [pattern ...]:订阅一个或多个符合给定模式的频道
PUBLISH channel message:往频道发布信息
PUBSUB
PUBSUB CHANNELS [PATTERN]:列出当前的活跃频道
PUBSUB NUMSUB [CHANNEL-1…CHANNEL-N]返回给定频道的订阅者数量,订阅模式的客户端不算
PUBSUB NUMPAT:返回订阅模式的数量
PUNSUBSCRIBE [pattern [pattern ...]]:指示客户端退订所有给定模式
SUBSCRIBE channel [channel ...]:订阅一个或多个频道信息
UNSUBSCRIBE [channel [channel ...]]:只是客户端退订给定频道
REDIS GEO提供了位置功能的支持,包括添加位置,计算位置记录,查找中心点某个距离范围内的位置。
命令
GEOADD key longitude latitudemember [longitude latitude member ...]:将给定的空间元素(纬度、精度、名字)添加到指定的键里面。 这些数据会以有序集合的形式被储存在键里面, 从而使得像 GEORADIUS 和 GEORADIUSBYMEMBER 这样的命令可以在之后通过位置查询取得这些元素。
GEOADD 命令以标准的 x,y 格式接受参数, 所以用户必须先输入经度,然后再输入纬度。 GEOADD 能够记录的坐标是有限的: 非常接近两极的区域是无法被索引的。 精确的坐标限制由 EPSG:900913 / EPSG:3785 / OSGEO:41001 等坐标系统定义, 具体如下:
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEODIST Sicily Palermo Catania "166274.15156960039" redis> GEORADIUS Sicily 15 37 100 km 1) "Catania" redis> GEORADIUS Sicily 15 37 200 km 1) "Palermo" 2) "Catania"
|
GEOPOSkey member [member ...]
从键里面返回所有给定位置元素的位置(经度和纬度)。
因为 GEOPOS 命令接受可变数量的位置元素作为输入,所以即使用户只给定了一个位置元素, 命令也会返回数组回复。
GEOPOS 命令返回一个数组, 数组中的每个项都由两个元素组成: 第一个元素为给定位置元素的经度,而第二个元素则为给定位置元素的纬度。
当给定的位置元素不存在时, 对应的数组项为空值
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEOPOS Sicily Palermo Catania NonExisting 1) 1) "13.361389338970184" 2) "38.115556395496299" 2) 1) "15.087267458438873" 2) "37.50266842333162" 3) (nil)
|
GEODIST key member1 member2 [unit]
返回两个给定位置之间的距离。
如果两个位置之间的其中一个不存在, 那么命令返回空值。
指定单位的参数 unit 必须是以下单位的其中一个:
如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。
GEODIST 命令在计算距离时会假设地球为完美的球形, 在极限情况下, 这一假设最大会造成 0.5% 的误差。
计算出的距离会以双精度浮点数的形式被返回。如果给定的位置元素不存在,那么命令返回空值。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEODIST Sicily Palermo Catania "166274.15156960039" redis> GEODIST Sicily Palermo Catania km "166.27415156960038" redis> GEODIST Sicily Palermo Catania mi "103.31822459492736" redis> GEODIST Sicily Foo Bar (nil)
|
GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST][WITHHASH] [ASC|DESC] [COUNT count]
以给定的经纬度为中心, 返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。
范围可以使用以下其中一个单位:
在给定以下可选项时, 命令会返回额外的信息:
命令默认返回未排序的位置元素。 通过以下两个参数,用户可以指定被返回位置元素的排序方式:
在默认情况下, GEORADIUS 命令会返回所有匹配的位置元素。 虽然用户可以使用 COUNT
GEORADIUS 命令返回一个数组, 具体来说:
在返回嵌套数组时, 子数组的第一个元素总是位置元素的名字。至于额外的信息, 则会作为子数组的后续元素, 按照以下顺序被返回:
举个例子, GEORADIUS Sicily 15 37 200 km withcoord withdist 这样的命令返回的每个子数组都是类似以下格式的:
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEORADIUS Sicily 15 37 200 km WITHDIST 1) 1) "Palermo" 2) "190.4424" 2) 1) "Catania" 2) "56.4413" redis> GEORADIUS Sicily 15 37 200 km WITHCOORD 1) 1) "Palermo" 2) 1) "13.361389338970184" 2) "38.115556395496299" 2) 1) "Catania" 2) 1) "15.087267458438873" 2) "37.50266842333162" redis> GEORADIUS Sicily 15 37 200 km WITHDIST WITHCOORD 1) 1) "Palermo" 2) "190.4424" 3) 1) "13.361389338970184" 2) "38.115556395496299" 2) 1) "Catania" 2) "56.4413" 3) 1) "15.087267458438873" 2) "37.50266842333162"
|
GEORADIUSBYMEMBERkey member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC][COUNT count]
这个命令和 GEORADIUS 命令一样, 都可以找出位于指定范围内的元素, 但是 GEORADIUSBYMEMBER 的中心点是由给定的位置元素决定的, 而不是像 GEORADIUS 那样, 使用输入的经度和纬度来决定中心点。
redis> GEOADD Sicily 13.583333 37.316667 "Agrigento" (integer) 1 redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEORADIUSBYMEMBER Sicily Agrigento 100 km 1) "Agrigento" 2) "Palermo"
|
GEOHASHkey member [member ...]
返回一个或多个位置元素的 Geohash表示。
返回一个数组,数组的每个项都是一个 geohash 。命令返回的 geohash 的位置与用户给定的位置元素的位置一一对应。
redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" (integer) 2 redis> GEOHASH Sicily Palermo Catania 1) "sqc8b49rny0" 2) "sqdtr74hyu0"
|
说明GEOHASH 见:https://en.wikipedia.org/wiki/Geohash