pika支持的redis接口及兼容情况

2018-09-26 11:07 更新

pika当前支持的redis接口 pika支持redis五种类型(分别为string、hash、list、set、zset)的接口,先列出其对redis的五种数据结构兼容统计。

统计所用的标记含义如下:

图标含义
o该接口完全支持,使用方式与redis没有任何区别
功能支持,但使用或输出与redis有部分差异,需注意
×当前还未支持

string

接口setgetdelexistsexpireexpireatpersistttlappend
状态ooooooooo
接口decrdecrbygetrangegetsetincrincrbyincrbyfloatmgetmset
状态ooooooooo
接口setexsetnxsetrangestrlenpexpirepexpireatpttlrenamerenamenx
状态oooo!!oxx
接口bitopgetbitpsetexsetbitdumpkeysmigratemoveobject
状态!!x!xoxxx
接口scanrestoresorttypebitpospfaddpfcountpfmerge
状态!xx!!ooo

备注:

  • pexpire:无法精确到毫秒,底层会自动截断按秒级别进行处理;
  • pexpireat:无法精确到毫秒,底层会自动截断按秒级别进行处理;
  • scan:会顺序迭代当前db的快照,由于pika允许重名五次,所以scan有优先输出顺序,依次为:string -> hash -> list -> zset -> set;
  • type:另外由于pika允许重名五次,所以type有优先输出顺序,依次为:string -> hash -> list -> zset -> set,如果这个key在string中存在,那么只输出sting,如果不存在,那么则输出hash的,依次类推。
  • bit操作:与redis不同,pika的bit操作范围为2^18

hash

接口hdelhexistshgethgetallhincrbyhincrbyfloathkeyshlenhmgethmset
状态oooooooooo
接口hsethsetnxhvalshscanhstrlen
状态ooooo

list

接口lindexlinsertllenlpoplpushlpushxlrangelremlsetltrim
状态oooooooooo
接口rpoprpoplpushrpushrpushblpopbrpopbrpoplpush
状态ooooxxx

set

接口saddscardsdiffsdiffstoresintersinterstoresismembersmemberssmovespop
状态oooooooooo
接口srandmembersremsunionsunionstoresscan
状态!oooo

备注:

  • srandmember:时间复杂度O( n ),耗时较多

zset

接口zaddzcardzcountzincrbyzrangezrangebyscorezrankzremzremrangebyrankzremrangebyscore
状态oooooooooo
接口zrevrangezrevrangebyscorezrevrankzscorezunionstorezinterstorezscanzrangebylexzlexcountzremrangebylex
状态ooo!oooooo

备注:

  • zscore:目前支持的数据范围是[-10^13, 10^13]。精度支持10e-5(小数点后5位),小于Redis的数据范围;

hyperloglog

接口pfaddpfcountpfmerge
状态ooo

备注:

  • 50w以内误差均小于1%, 100w以内误差小于3%, 但付出了时间代价.

geo

geoaddgeodistgeohashgeoposgeoradiusgeoradiusbymember
状态oooooo

备注:

  • GEO实现依赖zset数据结构, 所以HASH位数只有13位, 较Redis精度有所差距.
  • georadius和georadiusbymember默认输出是无序的.

管理命令(这里仅列出pika兼容的)

接口infoconfigclientpingbgsaveshutdownselect
状态!!!ooo!

备注:

  • info:info支持全部输出,也支持匹配形式的输出,例如可以通过info stats查看状态信息,需要注意的是key space与redis不同,pika对于key space的展示选择了分类型展示而非redis的分库展示(因为pika没有库),pika对于key space的统计是被动的,需要手动触发,然后pika会在后台进行统计,pika的key space统计是精确的。触发方式为执行:keyspace命令即可,然后pika会在后台统计,此时可以使用:keyspace readonly命令来进行查看,readonly参数可以避免反复进行统计,如果当前数据为0,则证明还在统计中;
  • config:当前config仅仅支持个别参数的get、set,不支持rewrite;
  • client:当前client命令支持client list及client kill,client list显示的内容少于redis;
  • select:该命令为摆设,可以执行,会返回成功,但无任何效果。

重要说明

  • 重名问题:由于pika每个类型独立运作, 所以允许重名。例如在key abc在string中存在的时候也同样允许在hash中存在,一个key最多重名5次(5大类型),但在同一接口中是无法重名的。所以建议在使用的时候对于不同类型不要使用完全相同的key;
  • 长度问题:pika kv的key value长度没有限制,其他数据结构hash zset set list 的key长度限制255, value没有限制。
  • 分库问题:pika不支持redis的多个库功能(db0,db1,db2),对于pika只有一个库,也就是db0,select命令在pika中可以执行,但实际上没有任何效果。
  • 数据展示:pika对于keyspace的展示选择了分类型展示而非redis的分库展示(因为pika没有分库概念),pika对于keyspace的统计是被动的,需要手动触发并不会立即输出,命令为:info keyspace [ 0|1 ],默认为0不触发,pika的keyspace统计是精确的。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号