所有后端开发者都应该掌握的Redis数据结构Redis支持多种不同的数据结构,包括5种基本数据结构和几种更复杂的数据结构,可以满足不同的应用场景。五种基本数据结构String:字符串,是构建其他数据结构的基础Hash:哈希列表List:列表Set:集合,基于哈希列表SortSet:有序集合复杂数据结构Bitmaps:位图,对位操作string的基础,可以实现节省空间的数据结构。Hyperloglog:一种用于估计集合中元素数量的概率数据结构。Geo:地理空间,地理空间索引半径查询。布隆过滤器:布隆过滤器。不同数据结构的相同点从上面的介绍我们可以看出支持的数据结构是不同的,但实际上Redis的每一种数据结构都是由一个key和value组成的,可以抽象为:以及所有的key数据结构的值是任意合法的字符串,不同数据结构的区别在于value中存储的值不同。比如最简单的String数据结构,它的值是String,所以String可以表示为:而Hash数据结构,它的值是一个hash列表,所以Hash可以表示为:这里列出String和Hash来说明一下,更多数据结构的内部结构和详细操作在以后的文章中讲。Redis常用命令Redis官网将Redis命令按照功能分为15个主题组。其中,Kyes主题的命令是所有数据结构通用的。因此,在了解其他数据结构命令之前,有必要认真学习。keykeys命令的作用是列出Redis的所有key。该命令的时间复杂度为O(N)。N随着Redis中键的数量的增加而增加。因此Redis的key数量较多,keys命令会执行很长时间,并且由于Redis是单线程的,如果一个命令耗时太长,后续的所有请求都不会得到响应。因此,请勿在生产服务器上使用keys命令。#key命令,时间复杂度为O(n)keyspattern#pattern可以是包含匹配模式的字符串,包括*,+,?,[a-z]等模式。举例existsexists命令用于判断一个或多个key是否存在。判断多个键时,键之间用空格隔开。exists的返回值是一个整数,表示当前判断有多少个key存在。#exists命令,时间复杂度O(1)existskey[key...]例子>settest1t1>existstest1test2(integer)1#只存在一个key>existstest3test3(integer)0#不存在keydeldel命令用于删除一个或多个key,以空格分隔,返回值为整数,表示成功删除了多少个已存在的key。所以如果只删除一个key,可以从返回值判断是否成功。如果删除多个keykey,则只能获取删除成功的次数。#del命令,时间复杂度O(n)delkey[key...]example>settestt>deltest(integer)1>msettest12test21>deltest1test2test3(integer)2#return2,表示删除成功#再次删除,返回0,因为删除成功的次数是0>deltest1test2test3(integer)0expire,pexpireexpire设置key过期的秒数,pexpire设置key过期的毫秒数,成功返回1,失败返回0。#expirecommand,时间复杂度为O(1)expirekeyseconds#pexpirecommand,时间复杂度为O(1)pexpirekeymillisecondsExample>msettesttest_valuetest1test1_value>expiretest10#设置10秒后过期(整数)1>pexpiretest1_value10000#设置10000毫秒(10s)后-expiration(integer)1>expirettt100(integer)0#如果key不存在,则设置失败,返回0ttl,pttlttl和pttl命令用于获取key的过期时间,返回值为整数,即代表几种含义情况:当key不存在或过期时,返回-2。当密钥存在且永久有效时,返回-1。当key设置了过期时间,返回的是剩余秒数(pttl是毫秒数)#ttl命令,时间复杂度O(1)ttlkey#pttl命令,时间复杂度O(1)pttlkey示例(ttl演示,pttl类似)>settesttest>expiretest100>ttltest(integer)98#返回剩余秒数>settest1#永久有效>ttltest1(integer)-1>ttltest2(integer)-2#不存在或过期#100秒后>ttltest#testhasexpired(integer)-2expireat,pexpireat设置key在某个时间戳过期,expreat参数timestamp以秒表示,pexpireat以毫秒表示,类似expire和pexpire的功能,返回1表示成功,0表示失败。#expireat命令,时间复杂度为O(1)expireatkeytimestamp#pexpireat命令,时间复杂度为O(1)pexpireatkeymilliseconds-timestampexample>settesttest>expireattest1560873600#2019-06-1900:00:00(integer)1>settest1test1>pexpireattest1156087360000#2019-06-1900:00:00毫秒表示(整数)1persist去掉key的过期时间,设置key永久有效。当key设置了过期时间,使用persist命令移除后返回1,key不存在或永久有效则返回0。#persist命令,时间复杂度O(1)persistkey例子>settesttest>ttltest(integer)-1#表示永久有效>persisttest(integer)0#对永久有效或者不存在的key使用persist命令,return>expiretest10(integer)1>persisttest(integer)1type判断key是什么类型的数据结构,返回值为string、list、set、hash、zset,分别代表我们前面介绍的Redis的五种基本数据结构。geo、hyperloglog、bitmaps等复杂数据结构都是在这五种基本数据结构上实现的。比如geo是zset类型,hyperloglog和bitmaps都是字符串。#type命令,时间复杂度O(1)typekeyexample>settesttest>typeteststring>hsethtesttesttest>typehtesthash总结以上就是Redis中最常用的通用命令。虽然简单,但是掌握它的用法和注意它还是非常有必要的。其实对于普通的开发者来说,很多时候只是使用这些基本的常用命令来操作Redis。
