pika當(dāng)前支持的redis接口 pika支持redis五種類型(分別為string、hash、list、set、zset)的接口,先列出其對(duì)redis的五種數(shù)據(jù)結(jié)構(gòu)兼容統(tǒng)計(jì)。
統(tǒng)計(jì)所用的標(biāo)記含義如下:
圖標(biāo) | 含義 |
---|
o | 該接口完全支持,使用方式與redis沒有任何區(qū)別 |
! | 功能支持,但使用或輸出與redis有部分差異,需注意 |
× | 當(dāng)前還未支持 |
string
|
接口 | set | get | del | exists | expire | expireat | persist | ttl | append |
---|
狀態(tài) | o | o | o | o | o | o | o | o | o |
接口 | decr | decrby | getrange | getset | incr | incrby | incrbyfloat | mget | mset |
狀態(tài) | o | o | o | o | o | o | o | o | o |
接口 | setex | setnx | setrange | strlen | pexpire | pexpireat | pttl | rename | renamenx |
狀態(tài) | o | o | o | o | ! | ! | o | x | x |
接口 | bitop | getbit | psetex | setbit | dump | keys | migrate | move | object |
狀態(tài) | ! | ! | x | ! | x | o | x | x | x |
接口 | scan | restore | sort | type | bitpos | pfadd | pfcount | pfmerge | |
狀態(tài) | ! | x | x | ! | ! | o | o | o |
備注:
- pexpire:無法精確到毫秒,底層會(huì)自動(dòng)截?cái)喟疵爰?jí)別進(jìn)行處理;
- pexpireat:無法精確到毫秒,底層會(huì)自動(dòng)截?cái)喟疵爰?jí)別進(jìn)行處理;
- scan:會(huì)順序迭代當(dāng)前db的快照,由于pika允許重名五次,所以scan有優(yōu)先輸出順序,依次為:string -> hash -> list -> zset -> set;
- type:另外由于pika允許重名五次,所以type有優(yōu)先輸出順序,依次為:string -> hash -> list -> zset -> set,如果這個(gè)key在string中存在,那么只輸出sting,如果不存在,那么則輸出hash的,依次類推。
- bit操作:與redis不同,pika的bit操作范圍為2^18
hash
|
接口 | hdel | hexists | hget | hgetall | hincrby | hincrbyfloat | hkeys | hlen | hmget | hmset |
---|
狀態(tài) | o | o | o | o | o | o | o | o | o | o |
接口 | hset | hsetnx | hvals | hscan | hstrlen | | | | | |
狀態(tài) | o | o | o | o | o | | | | |
list
|
接口 | lindex | linsert | llen | lpop | lpush | lpushx | lrange | lrem | lset | ltrim |
---|
狀態(tài) | o | o | o | o | o | o | o | o | o | o |
接口 | rpop | rpoplpush | rpush | rpush | blpop | brpop | brpoplpush | | | |
狀態(tài) | o | o | o | o | x | x | x | | |
set
|
接口 | sadd | scard | sdiff | sdiffstore | sinter | sinterstore | sismember | smembers | smove | spop |
---|
狀態(tài) | o | o | o | o | o | o | o | o | o | o |
接口 | srandmember | srem | sunion | sunionstore | sscan | | | | | |
狀態(tài) | ! | o | o | o | o | | | | |
備注:
- srandmember:時(shí)間復(fù)雜度O( n ),耗時(shí)較多
zset
接口 | zadd | zcard | zcount | zincrby | zrange | zrangebyscore | zrank | zrem | zremrangebyrank | zremrangebyscore |
---|
狀態(tài) | o | o | o | o | o | o | o | o | o | o |
接口 | zrevrange | zrevrangebyscore | zrevrank | zscore | zunionstore | zinterstore | zscan | zrangebylex | zlexcount | zremrangebylex |
狀態(tài) | o | o | o | ! | o | o | o | o | o | o |
備注:
- zscore:目前支持的數(shù)據(jù)范圍是[-10^13, 10^13]。精度支持10e-5(小數(shù)點(diǎn)后5位),小于Redis的數(shù)據(jù)范圍;
hyperloglog
接口 | pfadd | pfcount | pfmerge |
---|
狀態(tài) | o | o | o |
備注:
- 50w以內(nèi)誤差均小于1%, 100w以內(nèi)誤差小于3%, 但付出了時(shí)間代價(jià).
geo
口 | geoadd | geodist | geohash | geopos | georadius | georadiusbymember |
---|
狀態(tài) | o | o | o | o | o | o |
備注:
- GEO實(shí)現(xiàn)依賴zset數(shù)據(jù)結(jié)構(gòu), 所以HASH位數(shù)只有13位, 較Redis精度有所差距.
- georadius和georadiusbymember默認(rèn)輸出是無序的.
管理命令(這里僅列出pika兼容的)
接口 | info | config | client | ping | bgsave | shutdown | select |
---|
狀態(tài) | ! | ! | ! | o | o | o | ! |
備注:
- info:info支持全部輸出,也支持匹配形式的輸出,例如可以通過info stats查看狀態(tài)信息,需要注意的是key space與redis不同,pika對(duì)于key space的展示選擇了分類型展示而非redis的分庫展示(因?yàn)閜ika沒有庫),pika對(duì)于key space的統(tǒng)計(jì)是被動(dòng)的,需要手動(dòng)觸發(fā),然后pika會(huì)在后臺(tái)進(jìn)行統(tǒng)計(jì),pika的key space統(tǒng)計(jì)是精確的。觸發(fā)方式為執(zhí)行:keyspace命令即可,然后pika會(huì)在后臺(tái)統(tǒng)計(jì),此時(shí)可以使用:keyspace readonly命令來進(jìn)行查看,readonly參數(shù)可以避免反復(fù)進(jìn)行統(tǒng)計(jì),如果當(dāng)前數(shù)據(jù)為0,則證明還在統(tǒng)計(jì)中;
- config:當(dāng)前config僅僅支持個(gè)別參數(shù)的get、set,不支持rewrite;
- client:當(dāng)前client命令支持client list及client kill,client list顯示的內(nèi)容少于redis;
- select:該命令為擺設(shè),可以執(zhí)行,會(huì)返回成功,但無任何效果。
重要說明
- 重名問題:由于pika每個(gè)類型獨(dú)立運(yùn)作, 所以允許重名。例如在key abc在string中存在的時(shí)候也同樣允許在hash中存在,一個(gè)key最多重名5次(5大類型),但在同一接口中是無法重名的。所以建議在使用的時(shí)候?qū)τ诓煌愋筒灰褂猛耆嗤膋ey;
- 長(zhǎng)度問題:pika kv的key value長(zhǎng)度沒有限制,其他數(shù)據(jù)結(jié)構(gòu)hash zset set list 的key長(zhǎng)度限制255, value沒有限制。
- 分庫問題:pika不支持redis的多個(gè)庫功能(db0,db1,db2),對(duì)于pika只有一個(gè)庫,也就是db0,select命令在pika中可以執(zhí)行,但實(shí)際上沒有任何效果。
- 數(shù)據(jù)展示:pika對(duì)于keyspace的展示選擇了分類型展示而非redis的分庫展示(因?yàn)閜ika沒有分庫概念),pika對(duì)于keyspace的統(tǒng)計(jì)是被動(dòng)的,需要手動(dòng)觸發(fā)并不會(huì)立即輸出,命令為:info keyspace [ 0|1 ],默認(rèn)為0不觸發(fā),pika的keyspace統(tǒng)計(jì)是精確的。
更多建議: