美文网首页
后端开发都应该掌握的Redis基础

后端开发都应该掌握的Redis基础

作者: 星月落 | 来源:发表于2019-08-22 10:33 被阅读0次

    Redis的数据结构

    Redis支持多种不同的数据结构,包括5种基础数据结构和几种比较复杂的数据,这些数据结构可以满足不同的应用场景。

    五种基础数据结构

    String:字符串,是构建其他数据结构的基础

    Hash:哈希列表

    List:列表

    Set:集合,在哈希列表的基础上实现

    Sort Set:有序集合

    复杂的数据结构

    Bitmaps:位图,在string的基础上进行位操作,可以实现节省空间的数据结构。

    Hyperloglog:用于估计一个 set 中元素数量的概率性的数据结构。

    Geo:geospatial,地理空间索引半径查询。

    BloomFilter:布隆过滤器。

    不同数据结构的相同之处

    从上面的介绍,我们看到支持的数据结构的不同,但其实,Redis的每一种数据结构都由一个key和value组成,可以抽象为:

    而所有数据结构的key的值都是任意合法的字符串,不同的数据结构的区别就在于value存储的值的不同而不同。

    比如,最简简单的String数据结构,其value为String,所以String可以表示为:

    而Hash数据结构,其value为一个哈希列表,所以Hash可以表示为:

    这里就列出String和Hash来讲解说明,关于更多数据结构的内部结构及详细操作,我们在之后的文章在再谈谈吧。

    Redis的通用命令

    Redis官网将Redis的命令按照功能划分为15个主题分组,其中,Kyes主题的命令对所有的数据结构都通用,因此,有必要在了解其他数据结构命令前好好学习一下。

    keys

    keys命令的作用是列出Redis所有的key,该命令的时间复杂度为O(N),N随着Redis中key的数量增加而增加,因此Redis有大量的key,keys命令会执行很长时间,而由于Redis是单线程,某个命令耗费过长时间,则会导致后面的的所有请求无法得到响应,因此,千万不要在生产服务器上使用keys命令。

    # key命令,时间复杂度为O(n)

    keyspattern#pattern可为一个包含匹配模式的字符串,可以包含*,+,?,[a-z]等模式。

    示例

    > mset hello_test1 one hello_test2 two helloa a hellob b

    >keyshello*

    1)"hello_test1"

    2)"hello_test2"

    3)"helloa"

    4)"hellob"

    >keysheelo?

    1)"helloa"

    2)"hellob"

    >keyshello[a-z]

    1)"helloa"

    2)"hellob"

    exists

    exists命令用于判断一个或多个key是否存在,判断多个key时,key之间用空格分隔,exists的返回值为整数,表示当前判断有多少个key是存在的。

    # exists命令,时间复杂度O(1)

    exists key [key ...]

    示例

    >settest1 t1

    > exists test1 test2

    (integer) 1#只有一个key存在

    > exists test3 test3

    (integer) 0#key都不存在

    del

    del命令用于删除一个或多个key,多个key之间用空格分隔,其返回值为整数,表示成功删除了多少个存在的key,因此,如果只删除一个key,则可以从返回值中判断是否成功,如果删除多个key,则只能得到删除成功的数量。

    # del命令,时间复杂度O(n)

    delkey [key ...]

    示例

    >settestt

    >deltest

    (integer) 1

    > mset test1 2 test2 1

    > del test1 test2 test3

    (integer) 2 # 返回2,表示成功删除两个

    #再次删除,返回0,因为删除成功个数为0

    > del test1 test2 test3

    (integer) 0

    expire,pexpire

    expire设置key在多少秒之后过期,pexpire设置key在多少毫秒之后过期,成功返回1,失败返回0。

    # expire命令,时间复杂度为O(1)

    expire key seconds

    # pexpire命令,时间复杂度为O(1)

    pexpire key milliseconds

    示例

    > msettesttest_value test1 test1_value

    > expiretest10#设置10秒后过期

    (integer) 1

    > pexpire test1_value 10000#设置10000毫秒(10s)后过期

    (integer) 1

    > expire ttt 100

    (integer) 0# 不存在的key,设置失败,返回0 

    ttl,pttl

    ttl和pttl命令用于获取key的过期时间,其返回值为整型,代表的意义分为几种情况:

    当key不存在或过期时间,返回-2。

    当key存在且永久有效时,返回-1。

    当key有设置过期时间时,返回为剩下的秒数(pttl为毫秒数)

    # ttl命令,时间复杂度O(1)

    ttl key

    # pttl命令,时间复杂度O(1)

    pttl key

    示例(ttl的演示,pttl类似)

    >settesttest

    >expiretest100

    >ttltest

    (integer) 98#返回剩下的秒数

    >settest1#永久有效

    > ttl test1

    (integer) -1

    > ttl test2

    (integer) -2#不存在或过期

    #100秒后

    >ttltest# test已过期

    (integer) -2

    expireat,pexpireat

    设置key在某个时间戳过期,expreat参数时间戳用秒表示,而pexpireat则用毫秒表示,与expire和pexpire功能类似,返回1表示成功,0表示失败。

    #expireat命令,时间复杂度为O(1)

    expireat key timestamp

    #pexpireat命令,时间复杂度为O(1)

    pexpireat key milliseconds-timestamp

    示例

    >settesttest

    >expireattest1560873600# 2019-06-19 00:00:00

    (integer) 1

    >settest1 test1

    >pexpireat test1 156087360000# 2019-06-19 00:00:00的毫秒表示

    (integer) 1

    persist

    移除key的过期时间,将key设置为永久有效,当key设置了过期时间,使用persist命令移除后返回1,如果key不存在或本身就是永久有效的,则返回0。

    # persist命令,时间复杂度O(1)

    persist key

    示例

    >settesttest

    > ttltest

    (integer) -1# 表示永久有效

    > persisttest

    (integer) 0# 对永久有效或不存在的key使用persist命令,返回

    > expiretest10

    (integer) 1

    > persisttest

    (integer) 1

    type

    判断key是什么类型的数据结构,返回值为string,list,set,hash,zset,分别表示我们前面介绍的Redis的5种基础数据结构。

    geo,hyperloglog,bitmaps等复杂的数据结构,都是在这五种基础数据结构上实现,比如geo是zset类型,hyperloglog和bitmaps都为string。

    # type命令,时间复杂度O(1)

    type key

    示例

    >settesttest

    >typetest

    string

    >hset htesttesttest

    >typehtest

    hash

    小结

    上面介绍的是Redis中最常用的通用命令,虽然简单,但还是非常有必要掌握其用法和使用方面要注意的事项,其实,对于普通开发人员来说,很多时候,也只是使用这些基础通用的命令来操作Redis而已

    源网络,版权归原创者所有。如有侵权烦请告知,我们会立即删除并表示歉意。


    更多技术,欢迎关注下方公众号


    相关文章

      网友评论

          本文标题:后端开发都应该掌握的Redis基础

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