Redis的List是链表型的数据布局,可以行使LPUSH/RPUSH/LPOP/RPOP等呼吁在List的两头执行插入元素和弹出元素的操纵。固然List也支持在特定index上插入和读取元素的成果,但那时刻伟大度较高(O(N)),应警惕行使。
与List相干的常用呼吁:
- LPUSH:向指定List的左侧(即头部)插入1个或多个元素,返回插入后的List长度。时刻伟大度O(N),N为插入元素的数目
- RPUSH:同LPUSH,向指定List的右侧(即尾部)插入1或多个元素
- LPOP:从指定List的左侧(即头部)移除一个元素并返回,时刻伟大度O(1)
- RPOP:同LPOP,从指定List的右侧(即尾部)移除1个元素并返回
- LPUSHX/RPUSHX:与LPUSH/RPUSH相同,区别在于,LPUSHX/RPUSHX操纵的key假如不存在,则不会举办任何操纵
- LLEN:返回指定List的长度,时刻伟大度O(1)
- LRANGE:返回指定List中指定范畴的元素(双端包括,即LRANGE key 0 10会返回11个元素),时刻伟大度O(N)。应尽也许节制一次获取的元素数目,一次获取过大范畴的List元素会导致耽误,同时对长度不行预知的List,停止行使LRANGE key 0 -1这样的完备遍历操纵。
应审慎行使的List相干呼吁:
- LINDEX:返回指定List指定index上的元素,假如index越界,返回nil。index数值是回环的,即-1代表List最后一个位置,-2代表List倒数第二个位置。时刻伟大度O(N)
- LSET:将指定List指定index上的元素配置为value,假如index越界则返回错误,时刻伟大度O(N),假如操纵的是头/尾部的元素,则时刻伟大度为O(1)
- LINSERT:向指定List中指定元素之前/之后插入一个新元素,并返回操纵后的List长度。假如指定的元素不存在,返回-1。假如指定key不存在,不会举办任何操纵,时刻伟大度O(N)
因为Redis的List是链表布局的,上述的三个呼吁的算法服从较低,必要对List举办遍历,呼吁的耗时无法预估,在List长度大的环境下耗时会明明增进,应审慎行使。
换句话说,Redis的List现实是计划来用于实现行列,而不是用于实现相同ArrayList这样的列表的。假如你不是想要实现一个双端进出的行列,那么请只管不要行使Redis的List数据布局。
为了更好支持行列的特征,Redis还提供了一系列阻塞式的操纵呼吁,如BLPOP/BRPOP等,可以或许实现相同于BlockingQueue的手段,即在List为空时,阻塞该毗连,直到List中有工具可以出队时再返回。针对阻塞类的呼吁,此处不做具体切磋,请参考官方文档 中”Blocking operations on lists”一节。
Hash
Hash即哈希表,Redis的Hash和传统的哈希表一样,是一种field-value型的数据布局,可以领略成将HashMap搬入Redis。
Hash很是适实用于示意工具范例的数据,用Hash中的field对应工具的field即可。
Hash的利益包罗:
- 可以实现二元查找,如”查找ID为1000的用户的年数”
- 比起将整个工具序列化后作为String存储的要领,Hash可以或许有用地镌汰收集传输的耗损
- 当行使Hash维护一个集适时,提供了比List服从高得多的随机遇见呼吁
与Hash相干的常用呼吁:
- HSET:将key对应的Hash中的field配置为value。假如该Hash不存在,会自动建设一个。时刻伟大度O(1)
- HGET:返回指定Hash中field字段的值,时刻伟大度O(1)
- HMSET/HMGET:同HSET和HGET,可以批量操纵统一个key下的多个field,时刻伟大度:O(N),N为一次操纵的field数目
- HSETNX:同HSET,但如field已经存在,HSETNX不会举办任何操纵,时刻伟大度O(1)
- HEXISTS:判定指定Hash中field是否存在,存在返回1,不存在返回0,时刻伟大度O(1)
- HDEL:删除指定Hash中的field(1个或多个),时刻伟大度:O(N),N为操纵的field数目
- HINCRBY:同INCRBY呼吁,对指定Hash中的一个field举办INCRBY,时刻伟大度O(1)
应审慎行使的Hash相干呼吁:
- HGETALL:返回指定Hash中全部的field-value对。返回功效为数组,数组中field和value瓜代呈现。时刻伟大度O(N)
- HKEYS/HVALS:返回指定Hash中全部的field/value,时刻伟大度O(N)
上述三个呼吁城市对Hash举办完备遍历,Hash中的field数目与呼吁的耗时线性相干,对付尺寸不行预知的Hash,应严酷停止行使上面三个呼吁,而改为行使HSCAN呼吁举办游标式的遍历,详细请见 https://redis.io/commands/scan
Set
Redis Set是无序的,不行一再的String荟萃。
与Set相干的常用呼吁:
- SADD:向指定Set中添加1个或多个member,假如指定Set不存在,会自动建设一个。时刻伟大度O(N),N为添加的member个数
- SREM:从指定Set中移除1个或多个member,时刻伟大度O(N),N为移除的member个数
- SRANDMEMBER:从指定Set中随机返回1个或多个member,时刻伟大度O(N),N为返回的member个数
- SPOP:从指定Set中随机移除并返回count个member,时刻伟大度O(N),N为移除的member个数
- SCARD:返回指定Set中的member个数,时刻伟大度O(1)
- SISMEMBER:判定指定的value是否存在于指定Set中,时刻伟大度O(1)
- SMOVE:将指定member从一个Set移至另一个Set
慎用的Set相干呼吁:
- SMEMBERS:返回指定Hash中全部的member,时刻伟大度O(N)
- SUNION/SUNIONSTORE:计较多个Set的并集并返回/存储至另一个Set中,时刻伟大度O(N),N为参加计较的全部荟萃的总member数
- SINTER/SINTERSTORE:计较多个Set的交集并返回/存储至另一个Set中,,时刻伟大度O(N),N为参加计较的全部荟萃的总member数
- SDIFF/SDIFFSTORE:计较1个Set与1或多个Set的差集并返回/存储至另一个Set中,时刻伟大度O(N),N为参加计较的全部荟萃的总member数
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|