跳至主要內容

Redis常用命令

soulballad环境配置常用命令常用命令约 5640 字大约 19 分钟

Redis命令

1. Redis5大数据类型

1.1 redis键(key)

命令作用
keys *查看当前库所有的key
exists key判断某个key是否存在
type key查看你的key是什么类型
del key删除指定的key数据
unlink key根据value删除非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。
expire key 10为指定的key设置有效期10秒
ttl key查看指定的key还有多少秒过期,-1:表示永不过期,-2:表示已过期
select dbindex切换数据库【0-15】,默认为0
dbsize查看当前数据库key的数量
flushdb清空当前库
flushall通杀全部库

1.2 redis字符串(String)

命令语法说明
set:添加键值对set key value [EX seconds|PX milliseconds|EXAT timestamp|PXAT milliseconds-timestamp|KEEPTTL] [NX|XX] [GET]NX:当数据库中key不存在时,可以将key-value添加到数据库 XX:当数据库中key存在时,可以将key-value添加数据库,与NX参数互斥 EX:key的超时秒数 PX:key的超时毫秒数,与EX互斥 value中若包含空格、特殊字符,需用双引号包裹
get:获取值get <key>127.0.0.1:6379> set name ready OK 127.0.0.1:6379> get name "ready"
apend:追加值append <key> <value>127.0.0.1:6379> set k1 hello OK 127.0.0.1:6379> append k1 " world" (integer) 11 127.0.0.1:6379> get k1 "hello world"
strlen:获取值的长度strlen <key>127.0.0.1:6379> set name ready OK 127.0.0.1:6379> strlen name (integer) 5
setnx:key不存在时,设置key的值setnx <key> <value>127.0.0.1:6379> setnx site "itsoku.com" #site不存在,返回1,表示设置成功 (integer) 1 127.0.0.1:6379> setnx site "itsoku.com" #再次通过setnx设置site,由于已经存在了,所以设置失败,返回0 (integer) 0
incr:原子递增1incr <key>127.0.0.1:6379> set age 30 #age值为30 OK 127.0.0.1:6379> incr age #age增加1,返回31 (integer) 31 127.0.0.1:6379> get age #获取age的值 "31"
decr:原子递减1decr <key>127.0.0.1:6379> set age 30 #age值为30 OK 127.0.0.1:6379> decr age #age递减1,返回29 (integer) 29 127.0.0.1:6379> get age #获取age的值 "29"
incrby/decrby:递增或者递减指定的数字incrby/decrby <key> <步长>127.0.0.1:6379> set salary 10000 #设置salary为10000 OK 127.0.0.1:6379> incrby salary 5000 #salary添加5000,返回15000 (integer) 15000 127.0.0.1:6379> get salary #获取salary "15000" 127.0.0.1:6379> decrby salary 800 #salary减去800,返回14200 (integer) 14200
mset:同时设置多个key-valuemset <key1> <value1> <key2> <value2> ...127.0.0.1:6379> mset name ready age 30 OK 127.0.0.1:6379> get name "ready" 127.0.0.1:6379> get age "30"
mget:获取多个key对应的值mget <key1> <key2> ...127.0.0.1:6379> mset name ready age 30 #同时设置name和age OK 127.0.0.1:6379> mget name age #同时读取name和age的值 1) "ready" 2) "30"
msetnx:当多个key都不存在时,则设置成功msetnx <key1> <value1> <key2> <value2> ...127.0.0.1:6379> set k1 v1 #设置k1 OK 127.0.0.1:6379> msetnx k1 v1 k2 v2 #当k1和k2都不存在的时候,同时设置k1和k2,由于k1已存在,所以这个操作失败 (integer) 0 127.0.0.1:6379> mget k1 k2 #获取k1、k2,k2不存在 1) "v1" 2) (nil)
getrange:获取值的范围,类似java中的substringgetrange key start end127.0.0.1:6379> set k1 helloworld OK 127.0.0.1:6379> getrange k1 0 4 "hello"
setrange:覆盖指定位置的值setrange <key> <起始位置> <value>127.0.0.1:6379> set k1 helloworld OK 127.0.0.1:6379> get k1 "helloworld" 127.0.0.1:6379> setrange k1 1 java (integer) 10 127.0.0.1:6379> get k1 "hjavaworld"
setex:设置键值&过期时间(秒)setex <key> <过期时间(秒)> <value>127.0.0.1:6379> setex k1 100 v1 #设置k1的值为v1,有效期100秒 OK 127.0.0.1:6379> get k1 #获取k1的值 "v1" 127.0.0.1:6379> ttl k1 #获取k1还有多少秒失效 (integer) 96
getset:以新换旧,设置新值同时返回旧值getset <key> <value>127.0.0.1:6379> set name ready #设置name为ready OK 127.0.0.1:6379> getset name tom #设置name为tom,返回name的旧值 "ready" 127.0.0.1:6379> getset age 30 #设置age为30,age未设置过,返回age的旧值为null (nil)

1.3 redis列表(List)

命令语法说明
lpush/rpush:从左边或者右边插入一个或多个值lpush/rpush <key1> 、<value1> <key2> <value2> ...127.0.0.1:6379> flushdb #清空db,方便测试 OK 127.0.0.1:6379> rpush name java spring "springboot" "spring cloud" #列表name的左边插入4个元素 (integer) 4 127.0.0.1:6379> lrange name 1 2 #从左边取出索引位于[1,2]范围内的元素 1) "spring" 2) "springboot"
lrange:从列表左边获取指定范围内的值lrange <key> <star> <stop>127.0.0.1:6379> rpush course java c c++ php js nodejs #course集合的右边插入6个元素 (integer) 6 127.0.0.1:6379> lrange course 1 3 #获取course集合索引[1,3]范围内的元素 1) "c" 2) "c++" 3) "php"
rpoplpush:从一个列表右边弹出一个元素放到另外一个列表中rpoplpush source destination127.0.0.1:6379> rpush k1 1 2 3 #列表k1的右边添加3个元素[1,2,3] (integer) 3 127.0.0.1:6379> rpush k2 4 5 6 #列表k2的右边添加3个元素[4,5,6] (integer) 3 127.0.0.1:6379> rpoplpush k1 k2 #从k1的右边弹出一个元素放到k2的左边 "3" 127.0.0.1:6379> lrange k1 0 -1 #k1中剩下2个元素了 1) "1" 2) "2"
lpop/rpop:从左边或者右边弹出多个元素lpop/rpop <key> <count>127.0.0.1:6379> rpush course java c++ php js node js #集合course右边加入6个元素 (integer) 6 127.0.0.1:6379> lpop course #从左边弹出1个元素 "java" 127.0.0.1:6379> rpop course 2 #从右边弹出2个元素 1) "js" 2) "node"
lindex:获取指定索引位置的元素(从左到右)lindex key index127.0.0.1:6379> rpush course java c c++ php #列表course中放入4个元素 (integer) 4 127.0.0.1:6379> lindex course 2 #返回索引位置2的元素 "c++" 127.0.0.1:6379> lindex course 200 #返回索引位置200的元素,没有 (nil)
llen:获得列表长度llen key127.0.0.1:6379> rpush name ready tom jack (integer) 3 127.0.0.1:6379> llen name (integer) 3
linsert:在某个值的前或者后面插入一个值linsert <key> before|after <value> <newvalue>127.0.0.1:6379> rpush name ready tom jack #列表name中添加3个元素 (integer) 3 127.0.0.1:6379> linsert name before tom lily #tom前面添加lily (integer) 4 127.0.0.1:6379> linsert name before xxx lucy # 在元素xxx前面插入lucy,由于xxx元素不存在,插入失败,返回-1 (integer) -1
lrem:删除指定数量的某个元素LREM key count value127.0.0.1:6379> rpush k1 v1 v2 v3 v2 v2 v1 #k1列表中插入6个元素 (integer) 6 127.0.0.1:6379> lrem k1 2 v2 #k1集合中从左边删除2个v2 (integer) 2
lset:替换指定位置的值lset <key> <index> <value>127.0.0.1:6379> rpush name tom jack ready #name集合中放入3个元素 (integer) 3 127.0.0.1:6379> lset name 1 lily #将name集合中第2个元素替换为liy OK 127.0.0.1:6379> lset name 10 lily #索引超出范围,报错 (error) ERR index out of range 127.0.0.1:6379> lset course 1 java #course集合不存在,报错 (error) ERR no such key

2.4 redis集合(Set)

命令语法说明
sadd:添加一个或多个元素sadd <key> <value1> <value2> ...127.0.0.1:6379> sadd k1 v1 v2 v1 v3 v2 #k1中放入5个元素,会自动去重,成功插入3个 (integer) 3
smembers:取出所有元素smembers <key>127.0.0.1:6379> sadd k1 v1 v2 v1 v3 v2 (integer) 3 127.0.0.1:6379> smembers k1 1) "v2" 2) "v1" 3) "v3"
sismember:判断集合中是否有某个值sismember <key> <value>127.0.0.1:6379> sadd k1 v1 v2 v1 v3 v2 #k1集合中成功放入3个元素[v1,v2,v3] (integer) 3 127.0.0.1:6379> sismember k1 v1 #判断k1中是否包含v1,1:有 (integer) 1 127.0.0.1:6379> sismember k1 v5 #判断k1中是否包含v5,0:无 (integer) 0
scard:返回集合中元素的个数scard <key>127.0.0.1:6379> sadd k1 v1 v2 v1 v3 v2 (integer) 3 127.0.0.1:6379> scard k1 (integer) 3
srem:删除多个元素srem key member [member ...]127.0.0.1:6379> sadd course java c c++ python #集合course中添加4个元素 (integer) 4 127.0.0.1:6379> srem course java c #删除course集合中的java和c (integer) 2
spop:随机弹出多个值spop <key> <count>127.0.0.1:6379> sadd course java c c++ python #course集合中添加4个元素 (integer) 4 127.0.0.1:6379> spop course #随机弹出1个元素,被弹出的元素会被删除 "c++" 127.0.0.1:6379> spop course 2 #随机弹出2个元素 1) "java" 2) "python" 127.0.0.1:6379> smembers course #输出剩下的元素 1) "c"
srandmember:随机获取多个元素,不会从集合中删除srandmember <key> <count>127.0.0.1:6379> sadd course java c c++ python #course中放入5个元素 (integer) 4 127.0.0.1:6379> srandmember course 3 #随机获取3个元素,元素并不会被删除 1) "python" 2) "c++" 3) "c"
smove:将某个原创从一个集合移动到另一个集合smove <source> <destination> member127.0.0.1:6379> sadd course1 java php js #集合course1中放入3个元素[java,php,js] (integer) 3 127.0.0.1:6379> sadd course2 c c++ #集合course2中放入2个元素[c,c++] (integer) 2 127.0.0.1:6379> smove course1 course2 js #将course1中的js移动到course2 (integer) 1
sinter:取多个集合的交集sinter key [key ...]127.0.0.1:6379> sadd course1 java php js #集合course1:[java,php,js] (integer) 3 127.0.0.1:6379> sadd course2 c c++ js #集合course2:[c,c++,js] (integer) 3 127.0.0.1:6379> sadd course3 js html #集合course3:[js,html] (integer) 2 127.0.0.1:6379> sinter course1 course2 course3 #返回三个集合的交集,只有:[js] 1) "js"
sinterstore:将多个集合的交集放到一个新的集合中sinterstore destination key [key ...]
sunion:取多个集合的并集,自动去重sunion key [key ...]127.0.0.1:6379> sadd course1 java php js #集合course1:[java,php,js] (integer) 3 127.0.0.1:6379> sadd course2 c c++ js #集合course2:[c,c++,js] (integer) 3 127.0.0.1:6379> sadd course3 js html #集合course3:[js,html] (integer) 2 127.0.0.1:6379> sunion course1 course2 course3 #返回3个集合的并集,会自动去重 1) "php" 2) "js" 3) "java" 4) "html" 5) "c++" 6) "c"
sunionstore:将多个集合的并集放到一个新的集合中sinterstore destination key [key ...]
sdiff:取多个集合的差集sdiff key [key ...]127.0.0.1:6379> sadd course1 java php js #集合course1:[java,php,js] (integer) 3 127.0.0.1:6379> sadd course2 c c++ js #集合course2:[c,c++,js] (integer) 3 127.0.0.1:6379> sadd course3 js html #集合course3:[js,html] (integer) 2 127.0.0.1:6379> sdiff course1 course2 course3 #返回course1中有的而course2和course3中都没有的元素 1) "java" 2) "php"
sdiffstore:将多个集合的差集放到一个新的集合中sdiffstore destination key [key ...]

2.5 redis哈希(Hash)

命令语法说明
hset:设置多个field的值hset key field value [field value ...]127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30 (integer) 2
hget:获取指定filed的值hget key field127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30 (integer) 2 127.0.0.1:6379> hget user name #获取user中的name "ready"
hgetall:返回hash表所有的域和值hgetall key127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30 (integer) 2 127.0.0.1:6379> hgetall user #获取user所有信息 1) "name" 2) "ready" 3) "age" 4) "30"
hmset:和hset类似(已弃用)hmset key field value [field value ...]
hexists:判断给定的field是否存在,1:存在,0:不存在hexists key field127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30 (integer) 2 127.0.0.1:6379> hexists user name #user中存在name域 (integer) 1 127.0.0.1:6379> hexists user address #user中不存在address域,返回0 (integer) 0 127.0.0.1:6379> hexists user1 address #user1这个key不存在,返回0 (integer) 0
hkeys:列出所有的filedhkeys key127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30 (integer) 2 127.0.0.1:6379> hkeys user #获取user中的所有filed 1) "name" 2) "age"
hvals:列出所有的valuehvals key127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30 (integer) 2 127.0.0.1:6379> hvals user #获取user中的所有filed的值列表 1) "ready" 2) "30"
hlen:返回filed的数量hlen key127.0.0.1:6379> hset user name ready age 30 #哈希表user中设置2个域:name和age,name的值为ready,age的值为30 (integer) 2 127.0.0.1:6379> hlen user (integer) 2
hincrby:filed的值加上指定的增量hincrby key field increment127.0.0.1:6379> hset siteInfo site itsoku.com pv 1000 #hash表siteInfo中有2个域:{site:"itsoku.com",pv:1000} (integer) 2 127.0.0.1:6379> hget siteInfo pv #获取siteInfo中pv的值 "1000" 127.0.0.1:6379> hincrby siteInfo pv 10 #siteInfo中的pv值增加10 (integer) 1010 127.0.0.1:6379> hget siteInfo pv #获取siteInfo中的pv "1010" 127.0.0.1:6379> hincrby siteInfo uv 500 #siteInfo中的uv值增加500,uv这个域不存在,则会先添加,然后再执行hincrby (integer) 500
hsetnx:当filed不存在的时候,设置filed的值hsetnx key field value127.0.0.1:6379> hset user name ready age 30 #创建user,包含2个域:name、age (integer) 2 127.0.0.1:6379> hsetnx user name tom #name已存在,设置失败,返回0 (integer) 0 127.0.0.1:6379> hget user name #name依旧是ready "ready" 127.0.0.1:6379> hsetnx user address shanghai #address不存在,设置成功 (integer) 1 127.0.0.1:6379> hget user address #输出address的值 "shanghai"

2.6 redis有序集合zset(sorted set)

zadd:添加元素zadd <key> <score1> <member1> <score2> <member2> ...127.0.0.1:6379> zadd topn 100 java 80 c 90 c++ 50 php 70 js #创建名称为topn的zset,添加了5个元素 (integer) 5
zrange:score升序,获取指定索引范围的元素zrange key start top [withscores]127.0.0.1:6379> zadd topn 100 java 80 c 90 c++ 50 php 70 js #创建名称为topn的zset,添加了5个元素 (integer) 5 127.0.0.1:6379> zrange topn 2 4 #返回索引范围[2,4]内的3个元素 1) "c" 2) "c++" 3) "java"
zrevrange:score降序,获取指定索引范围的元素zrevrange key start stop [WITHSCORES]127.0.0.1:6379> zadd topn 100 java 80 c 90 c++ 50 php 70 js #创建名称为topn的zset,添加了5个元素 (integer) 5 127.0.0.1:6379> zrevrange topn 0 2 #按照score降序获取前3名 1) "java" 2) "c++" 3) "c"
zrangebyscore:按照score升序,返回指定score范围内的数据zrangebyscore key min max [WITHSCORES] [LIMIT offset count]127.0.0.1:6379> zadd topn 100 java 80 c 90 c++ 50 php 70 js #创建名称为topn的zset,添加了5个元素 (integer) 5 127.0.0.1:6379> zrangebyscore topn 70 90 #score升序,获取score位于[70,90]区间中的元素值 1) "js" 2) "c" 3) "c++"
zrevrangebyscore:按照score降序,返回指定score范围内的数据zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]127.0.0.1:6379> zadd topn 100 java 80 c 90 c++ 50 php 70 js #创建名称为topn的zset,添加了5个元素 (integer) 5 127.0.0.1:6379> zrevrangebyscore topn 100 90 #score降序,获取score位于[70,90]区间中的元素值 1) "java" 2) "c++"
zincrby:为指定元素的score加上指定的增量zincrby key increment member127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ #集合topx中添加3个元素:java、c、c++,对应的score分别是:90、70、80 (integer) 3 127.0.0.1:6379> zincrby topx 5 java #对topx中的元素java的score加5,变成95了 "95"
zrem:删除集合中多个元素zrem key member [member ...]127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ #集合topx中添加3个元素:java、c、c++,对应的score分别是:90、70、80 (integer) 3 127.0.0.1:6379> zrem topx c c++ #删除集合topx中的2个元素:c、c++ (integer) 2
zremrangebyrank:根据索引范围删除元素zremrangebyrank key start stop127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ #集合topx中添加3个元素:java、c、c++,对应的score分别是:90、70、80 (integer) 3 127.0.0.1:6379> zremrangebyrank topx 0 1 #删除索引范围[0,1]的数据 (integer) 2 127.0.0.1:6379> zrange topx 0 -1 #输出鞂topx中所有元素 1) "java"
zremrangebyscore:根据score的范围删除元素zremrangebyscore key min max127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ 50 php #topx集合中添加4个元素 (integer) 4 127.0.0.1:6379> zremrangebyscore topx 70 80 #删除score位于[70,80]区间的元素 (integer) 2
zcount:统计指定score范围内元素的个数zcount key min max127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ 50 php #topx集合中添加4个元素 (integer) 4 127.0.0.1:6379> zcount topx 80 100 #统计score位于[80,100]区间中的元素个数 (integer) 2
zrank:按照score升序,返回某个元素在集合中的排名zrank key member127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ 50 php #topx集合中添加4个元素 (integer) 4 127.0.0.1:6379> zrank topx c #获取元素c的排名,返回1表示排名第2 (integer) 1
zrevrank:按照score降序,返回某个元素在集合中的排名zrank key member127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ 50 php #topx集合中添加4个元素 (integer) 4 127.0.0.1:6379> zrevrank topx java #score降序,得到java的排名,排在第1位 (integer) 0
zscore:返回集合中指定元素的scorezscore key member127.0.0.1:6379> zadd topx 90 java 70 c 80 c++ 50 php #topx集合中添加4个元素 (integer) 4 127.0.0.1:6379> zscore topx java #获取集合topx中java的score "90"

2. Redis发布订阅

2.1 subscribe

订阅一个或者多个频道

subscribe channel [channel ...]

订阅给定的一个或多个频道的信息。

**返回值:**接收到的信息(请参见下面的代码说明)。

redis> subscribe msg chat_room
Reading messages... (press Ctrl-C to quit)
1) "subscribe"       # 返回值的类型:显示订阅成功
2) "msg"             # 订阅的频道名字
3) (integer) 1       # 目前已订阅的频道数量
1) "subscribe"
2) "chat_room"
3) (integer) 2
1) "message"         # 返回值的类型:信息
2) "msg"             # 来源(从那个频道发送过来)
3) "hello moto"      # 信息内容
1) "message"
2) "chat_room"
3) "testing...haha"

2.2 publish

发布消息到指定的频道

publish channel message

将信息 message 发送到指定的频道 channel

**返回值:**接收到信息 message 的订阅者数量。

redis> publish bad_channel "can any body hear me?"
(integer) 0
redis> publish msg "good morning"
(integer) 1
redis> publish chat_room "hello~ everyone"
(integer) 3

2.3 psubscribe

订阅一个或多个符合给定模式的频道

psubscribe pattern [pattern ...]

订阅一个或多个符合给定模式的频道。

每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.newsit.blogit.tweets 等等), news.* 匹配所有以 news. 开头的频道( news.itnews.global.today 等等),诸如此类。

redis> psubscribe news.* tweet.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"                  # 返回值的类型:显示订阅成功
2) "news.*"                      # 订阅的模式
3) (integer) 1                   # 目前已订阅的模式的数量
1) "psubscribe"
2) "tweet.*"
3) (integer) 2
1) "pmessage"                    # 返回值的类型:信息
2) "news.*"                      # 信息匹配的模式
3) "news.it"                     # 信息本身的目标频道
4) "Google buy Motorola"         # 信息的内容
1) "pmessage"
2) "tweet.*"
3) "tweet.huangz"
4) "hello"
1) "pmessage"
2) "tweet.*"
3) "tweet.joe"
4) "@huangz morning"
1) "pmessage"
2) "news.*"
3) "news.life"
4) "An apple a day, keep doctors away"

3. Redis3种新数据类型

3.1 Bitmaps

命令语法说明
setbit:设置某个偏移量的值(0或1)setbit key offset valueredis> setbit bit 10086 1 (integer) 0 redis> getbit bit 10086 (integer) 1 redis> getbit bit 100 # bit 默认被初始化为 0 (integer) 0
getbit:获取某个偏移位的值getbit key offset127.0.0.1:6379> setbit users 1001 1 #设置偏移量1001的bit位的值为1 (integer) 0 127.0.0.1:6379> getbit users 1001 #获取偏移位1001的bit位的值 (integer) 1 127.0.0.1:6379> getbit users 1000 #获取偏移位1000的bit位的值,未设置,返回0 (integer) 0
bitcount:统计bit位都为1的数量bitcount key [start] [end]127.0.0.1:6379> setbit user 7 1 # 设置user这个bitmaps中偏移量为7的bit为值为1,也就是第8个bit位的值 (integer) 0 127.0.0.1:6379> setbit user 15 1 # 设置user这个bitmaps中偏移量为15的bit为值为1 (integer) 0 127.0.0.1:6379> bitcount user # 获取user这个bitmaps中1的数量 (integer) 3 127.0.0.1:6379> bitcount user 0 1 # 获取[0,1]这个字节内bit位上1的数量,也就是offset是[0,15]的位置上1的数量,所以是2个 (integer) 2
bittop:对一个多个bitmaps执行位操作bitop operation destkey key [key ...]redis> setbit bits-1 0 1 # bits-1 = 1001 (integer) 0 redis> setbit bits-1 3 1 (integer) 0 redis> setbit bits-2 0 1 # bits-2 = 1011 (integer) 0 redis> setbit bits-2 1 1 (integer) 0 redis> setbit bits-2 3 1 (integer) 0 redis> bitop and and-result bits-1 bits-2 (integer) 1 redis> getbit and-result 0 # and-result = 1001 (integer) 1 redis> getbit and-result 1

3.2 HyperLoglog

命令语法说明
pfadd:添加多个元素pfadd key element [element ...]127.0.0.1:6379> pfadd program java php c c++ # program中添加4个元素[java,php,c,c++],添加成功发,返回1 (integer) 1 127.0.0.1:6379> pfadd program java # 再次添加java,由于已经存在,所以添加失败,返回0 (integer) 0 127.0.0.1:6379> pfadd program java js # 再次添加2个元素,java已经存在了,但是js不存在,添加成功,返回1 (integer) 1
pfcount:获取多个HLL合并后元素的个数pfcount key1 key2 ...127.0.0.1:6379> pfadd uv1 a b c d e #uv1中5个元素:[a,b,c,d,e] (integer) 1 127.0.0.1:6379> pfcount uv1 #uv1中数量为5 (integer) 5 127.0.0.1:6379> pfadd uv2 b c d e f #uv2中5个元素:[b,c,d,e,f] (integer) 1 127.0.0.1:6379> pfcount uv2 #uv2中数量为5 (integer) 5 127.0.0.1:6379> pfcount uv1 uv2 # 获取uv1和uv2去重之后数量合集:[a,b,c,d,e,f],数量为5 (integer) 5
pfmerge:将多个HLL合并后元素放入另外一个HLLpfmerge destkey sourcekey [sourcekey ...]127.0.0.1:6379> pfadd uv1 a b c d e #uv1中5个元素:[a,b,c,d,e] (integer) 1 127.0.0.1:6379> pfcount uv1 #uv1中数量为5 (integer) 5 127.0.0.1:6379> pfadd uv2 b c d e f #uv2中5个元素:[b,c,d,e,f] (integer) 1 127.0.0.1:6379> pfcount uv2 #uv2中数量为5 (integer) 5 127.0.0.1:6379> pfmerge uv_dest uv1 uv2 #将uv1和uv2合并后放入uv_dest OK 127.0.0.1:6379> pfcount uv_dest #uv_dest元素个数为6 (integer) 6

3.3 Geographic

命令语法说明
geoadd:添加多个位置的经纬度geoadd key longitude latitude member [longitude latitude member ...]127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai #添加上海的经纬度 (integer) 1 127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing #添加重庆、深圳、北京 3 个城市的经纬度 (integer) 3 127.0.0.1:6379> type china:city #发现geo实际上使用zset类型存储的 zset 127.0.0.1:6379> zrange china:city 0 -1 1) "chongqing" 2) "shenzhen" 3) "shanghai" 4) "beijing"
geopos:获取多个位置的坐标值geopos key member [member ...]127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai #添加上海的经纬度 (integer) 1 127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing #添加重庆、深圳、北京 3 个城市的经纬度 (integer) 3 127.0.0.1:6379> geopos china:city wuhan beijing chongqing #获取武汉、北京、重庆 3个城市的坐标,由于没有添加武汉的数据,所以没有获取到,其他2个获取到了 1) (nil) 2) 1) "116.38000041246414185" 2) "39.90000009167092543" 3) 1) "106.49999767541885376" 2) "29.52999957900659211"
geodist:获取两个位置的直线距离geodist key member1 member2 [m|km|ft|mi]127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai #添加上海的经纬度 (integer) 1 127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing #添加重庆、深圳、北京 3 个城市的经纬度 (integer) 3 127.0.0.1:6379> geodist china:city beijing chongqing km #获取北京到重庆的直线距离 "1462.9505"
georadius:以给定的经纬度为中心,找出某一半径内的元素georadius key longitude latitude radius m|km|ft|mi127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai #添加上海的经纬度 (integer) 1 127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing #添加重庆、深圳、北京 3 个城市的经纬度 (integer) 3 127.0.0.1:6379> georadius china:city 110 30 1000 km #在china:city中检索:以经纬度(110,30)为中心,半径为1000km内的位置列表 1) "chongqing" 2) "shenzhen"
上次编辑于:
贡献者: soulballad