美文网首页
redis基础以及高新能和性能调优(五大常用数据类型)

redis基础以及高新能和性能调优(五大常用数据类型)

作者: 孤独而灿烂的郑金叹 | 来源:发表于2018-06-11 23:16 被阅读0次

    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)

    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数

    ***
    

    Redis Sorted Set是有序的、不可重复的String集合。Sorted Set中的每个元素都需要指派一个分数(score),Sorted Set会根据score对元素进行升序排序。如果多个member拥有相同的score,则以字典序进行升序排序。

    Sorted Set非常适合用于实现排名。

    Sorted Set的主要命令:

    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))
    慎用的Sorted Set相关命令:

    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)

    String是Redis的基础数据类型,Redis没有Int、Float、Boolean等数据类型的概念,所有的基本类型在Redis中都以String体现。

    String相关的常用命令:

    SET:为一个key设置value,可以配合EX/PX参数指定key的有效期,通过NX/XX参数针对key是否存在的情况进行区别操作,时间复杂度O(1)
    GET:获取某个key对应的value,时间复杂度O(1)
    GETSET:为一个key设置value,并返回该key的原value,时间复杂度O(1)
    MSET:为多个key设置value,时间复杂度O(N)
    MSETNX:同MSET,如果指定的key中有任意一个已存在,则不进行任何操作,时间复杂度O(N)
    MGET:获取多个key对应的value,时间复杂度O(N)
    上文提到过,Redis的基本数据类型只有String,但Redis可以把String作为整型或浮点型数字来使用,主要体现在INCR、DECR类的命令上:

    INCR:将key对应的value值自增1,并返回自增后的值。只对可以转换为整型的String数据起作用。时间复杂度O(1)
    INCRBY:将key对应的value值自增指定的整型数值,并返回自增后的值。只对可以转换为整型的String数据起作用。时间复杂度O(1)
    DECR/DECRBY:同INCR/INCRBY,自增改为自减。
    INCR/DECR系列命令要求操作的value类型为String,并可以转换为64位带符号的整型数字,否则会返回错误。
    也就是说,进行INCR/DECR系列命令的value,必须在[-2^63 ~ 2^63 - 1]范围内。

    前文提到过,Redis采用单线程模型,天然是线程安全的,这使得INCR/DECR命令可以非常便利的实现高并发场景下的精确控制。

    相关文章

      网友评论

          本文标题:redis基础以及高新能和性能调优(五大常用数据类型)

          本文链接:https://www.haomeiwen.com/subject/pcpkeftx.html