|
|
51CTO旗下网站
|
|
移动端

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

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

作者:程序员圣经来源:今日头条|2019-08-21 10:15

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

Redis的数据结构

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

五种基础数据结构

  • String:字符串,是构建其他数据结构的基础
  • Hash:哈希列表
  • List:列表
  • Set:集合,在哈希列表的基础上实现
  • Sort Set:有序集合

复杂的数据结构

  • Bitmaps:位图,在string的基础上进行位操作,可以实现节省空间的数据结构。
  • Hyperloglog:用于估计一个 set 中元素数量的概率性的数据结构。
  • Geo:geospatial,地理空间索引半径查询。
  • BloomFilter:布隆过滤器。

不同数据结构的相同之处

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

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

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

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

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

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

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

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

Redis的通用命令

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

keys

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

  1. key命令,时间复杂度为O(n) 
  2. keys pattern #pattern可为一个包含匹配模式的字符串,可以包含*,+,?,[a-z]等模式。 

示例

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

exists

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

  1. # exists命令,时间复杂度O(1) 
  2. exists key [key ...] 

示例

  1. set test1 t1 
  2. > exists test1 test2  
  3. (integer) 1 #只有一个key存在 
  4. > exists test3 test3 
  5. (integer) 0 #key都不存在 

del

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

  1. # del命令,时间复杂度O(n) 
  2. del key [key ...] 

示例

  1. set test t 
  2. > del test 
  3. (integer) 1 
  4. > mset test1 2 test2 1 
  5. > del test1 test2 test3 
  6. (integer) 2 # 返回2,表示成功删除两个 
  7. #再次删除,返回0,因为删除成功个数为0 
  8. > del test1 test2 test3 
  9. (integer) 0 

expire,pexpire

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

  1. # expire命令,时间复杂度为O(1) 
  2. expire key seconds 
  3. # pexpire命令,时间复杂度为O(1) 
  4. pexpire key milliseconds 

示例

  1. > mset test test_value test1 test1_value 
  2. > expire test 10 #设置10秒后过期 
  3. (integer) 1 
  4. > pexpire test1_value 10000 #设置10000毫秒(10s)后过期 
  5. (integer) 1 
  6. > expire ttt 100 
  7. (integer) 0 # 不存在的key,设置失败,返回0  

ttl,pttl

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

  • 当key不存在或过期时间,返回-2。
  • 当key存在且永久有效时,返回-1。
  • 当key有设置过期时间时,返回为剩下的秒数(pttl为毫秒数)
  1. # ttl命令,时间复杂度O(1) 
  2. ttl key 
  3. # pttl命令,时间复杂度O(1) 
  4. pttl key 

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

  1. set test test 
  2. > expire test 100 
  3. > ttl test 
  4. (integer) 98#返回剩下的秒数 
  5. set test1 #永久有效 
  6. > ttl test1 
  7. (integer) -1 
  8. > ttl test2 
  9. (integer) -2#不存在或过期 
  10. #100秒后 
  11. > ttl test # test已过期 
  12. (integer) -2 

expireat,pexpireat

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

  1. #expireat命令,时间复杂度为O(1) 
  2. expireat key timestamp 
  3. #pexpireat命令,时间复杂度为O(1) 
  4. pexpireat key milliseconds-timestamp 

示例

  1. set test test 
  2. > expireat test 1560873600 # 2019-06-19 00:00:00 
  3. (integer) 1 
  4. set test1 test1 
  5. > pexpireat test1 156087360000 # 2019-06-19 00:00:00的毫秒表示 
  6. (integer) 1 

persist

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

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

示例

  1. set test test 
  2. > ttl test 
  3. (integer) -1 # 表示永久有效 
  4. > persist test 
  5. (integer) 0 # 对永久有效或不存在的key使用persist命令,返回 
  6. > expire test 10 
  7. (integer) 1 
  8. > persist test 
  9. (integer) 1 

type

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

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

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

示例

  1. set test test 
  2. > type test 
  3. string 
  4. > hset htest test test 
  5. > type htest 
  6. hash 

小结

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

【编辑推荐】

  1. 工作日志,多租户模式下的数据备份和迁移
  2. 以数据为中心英特尔赋能用户深挖数据价值助推产业升级
  3. D炸天的Redis,该如何监控?
  4. 让 Redis 这么快的 4 项黑科技,你知道是什么吗?
  5. 数据是资产,效率是发展! 大运维时代的数据安全与管理沙龙在深圳顺利举办
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

这就是5G

这就是5G

5G那些事儿
共15章 | armmay

115人订阅学习

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

371人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

758人订阅学习

读 书 +更多

Windows用户态程序高效排错

本书是一本介绍Windows系统上的用户态程序排错方法和技巧的书。本书分为4个章节,先介绍最重要的、通用的思考方法,以便制定排错步骤;再介...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微