Redis(二)-基本数据类型

2020-11-25  本文已影响0人  进击的蚂蚁zzzliu

概述

本节主要分析Redis5大数据类型(对应上一节分析的RedisObject中Type属性:String/List/Set/Hash/Sorted Set)的编码/常用操作

1. String

1.1 编码

注意:
1、long/double类型的浮点数是用字符串保存的,对其操作会先转化为浮点型进行操作再转化为字符串保存
2、对int型操作(如APPEND一个字符串),会把int转化为raw
3、embstr字符串为只读,若要对其修改会先转化为raw

1.2 常用操作

SET:为一个key设置value,可以配合EX/PX参数指定key的有效期,通过NX/XX参数针对key是否存在的情况进行区别操作,时间复杂度O(1)
GET:获取某个key对应的value,时间复杂度O(1)
GETSET:为一个key设置value,并返回该key的原value,时间复杂度O(1)
INCR:将key对应的value值自增1,并返回自增后的值。只对可以转换为整型的String数据起作用。时间复杂度O(1)
INCRBY:将key对应的value值自增指定的整型数值,并返回自增后的值。只对可以转换为整型的String数据起作用。时间复杂度O(1)
DECR/DECRBY:同INCR/INCRBY,自增改为自减。
MSET:为多个key设置value,时间复杂度O(N)
MSETNX:同MSET,如果指定的key中有任意一个已存在,则不进行任何操作,时间复杂度O(N)
MGET:获取多个key对应的value,时间复杂度O(N)
BITCOUNT:获取bit位为1的位数
BITOP:操作bit位,BITOP operation destkey key [key ...]
BITPOS:查找bit位,BITPOS key bit [start] [end]
GETBIT:查看bit位,GETBIT key offset
SETBIT:设置bit位,SETBIT key offset value

1.3 小结

2. List

1.1 编码

1.2 常用操作

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中指定范围的元素,时间复杂度O(N)
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)

1.3 小结

3. Set

1.1 编码

1.2 常用操作

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
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数

1.3 小结

4. Hash

1.1 编码

1.2 常用操作

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)
HGETALL:返回指定Hash中所有的field-value对。返回结果为数组,数组中field和value交替出现。时间复杂度O(N)
HKEYS/HVALS:返回指定Hash中所有的field/value,时间复杂度O(N)

1.3 小结

5. Sorted Set

1.1 编码

1.2 常用操作

ZADD:向指定Sorted Set中添加1个或多个member,时间复杂度O(Mlog(N)),M为添加的member数量,N为Sorted Set中的member数量
ZREM:从指定Sorted Set中删除1个或多个member,时间复杂度O(Mlog(N)),M为删除的member数量,N为Sorted Set中的member数量
ZCOUNT:返回指定Sorted Set中指定score范围内的member数量,时间复杂度:O(log(N))
ZCARD:返回指定Sorted Set中的member数量,时间复杂度O(1)
ZSCORE:返回指定Sorted Set中指定member的score,时间复杂度O(1)
ZRANK/ZREVRANK:返回指定member在Sorted Set中的排名,ZRANK返回按升序排序的排名,ZREVRANK则返回按降序排序的排名。时间复杂度O(log(N))
ZINCRBY:同INCRBY,对指定Sorted Set中的指定member的score进行自增,时间复杂度O(log(N))
ZRANGE/ZREVRANGE:返回指定Sorted Set中指定排名范围内的所有member,ZRANGE为按score升序排序,ZREVRANGE为按score降序排序,时间复杂度O(log(N)+M),M为本次返回的member数
ZRANGEBYSCORE/ZREVRANGEBYSCORE:返回指定Sorted Set中指定score范围内的所有member,返回结果以升序/降序排序,min和max可以指定为-inf和+inf,代表返回所有的member。时间复杂度O(log(N)+M)
ZREMRANGEBYRANK/ZREMRANGEBYSCORE:移除Sorted Set中指定排名范围/指定score范围内的所有member。时间复杂度O(log(N)+M)

1.3 小结

总结

上一篇 下一篇

猜你喜欢

热点阅读